Gri*_*ndz 9 c# unity-game-engine prime31
好的,我在这里和团结论坛上看到了许多类似的问题,询问从一种格式转换到另一种格式.我有一个(希望)简单的问题,我找不到答案.我正在使用Prime31的游戏中心插件来处理基于回合的多人游戏.在Prime31的插件中,他们会要求您输入一个字节[]发送给其他玩家.(状态数据)所以问题是,将List转换为字节数组然后将它们从字节数组转换回来的好方法是什么?
作为参考,这是我需要的一个复杂的类,我可能需要稍后添加更多的成员,但不是任何不同的类型.如果这使得将PokerPlayers列表转换为字节[]更容易,那么int的列表(手中的牌)可以很容易地成为4个单独的int.此列表也不是设定长度,但始终为4-8.
public class PokerPlayer{
public string playerID;
public string alias;
public int wildCard;
public List<int> cardsInHand;
public int chips;
}
Run Code Online (Sandbox Code Playgroud)
我觉得当我看到答案的时候,我会因为没有及早看到答案而自责.任何指向相关材料的指针/链接都是甜蜜的,我现在用谷歌搜索了3个小时,类似(SO类似)但不完全相同的问题.
Tim*_*out 26
您可能想尝试序列化.
var binFormatter = new BinaryFormatter();
var mStream = new MemoryStream();
binFormatter.Serialize(mStream, myObjToSerialize);
//This gives you the byte array.
mStream.ToArray();
Run Code Online (Sandbox Code Playgroud)
然后,如果要将字节数组转换回对象:
var mStream = new MemoryStream();
var binFormatter = new BinaryFormatter();
// Where 'objectBytes' is your byte array.
mStream.Write (objectBytes, 0, objectBytes.Length);
mStream.Position = 0;
var myObject = binFormatter.Deserialize(mStream) as YourObjectType;
Run Code Online (Sandbox Code Playgroud)
Car*_*arl 10
BinaryFormatter现在是一个安全风险。如果我找到一个好的方法来做到这一点而不使用它我会回来
编辑:这仍然是谷歌的最高结果,所以我将展示我已经做了什么来摆脱BinaryFormatter
您需要 Newtonsoft.Json
public static class ExtendedSerializerExtensions
{
private static readonly JsonSerializerSettings SerializerSettings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto,
};
public static byte[] Serialize<T>(this T source)
{
var asString = JsonConvert.SerializeObject(source, SerializerSettings);
return Encoding.Unicode.GetBytes(asString);
}
public static T Deserialize<T>(this byte[] source)
{
var asString = Encoding.Unicode.GetString(source);
return JsonConvert.DeserializeObject<T>(asString);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要流而不是字节数组,那么离这里并不远
| 归档时间: |
|
| 查看次数: |
27444 次 |
| 最近记录: |