繁体   English   中英

将字典或列表转换为字节[]

[英]convert dictionary or list to byte[]

好的,我在这里和统一论坛上都看到了许多类似的问题,询问有关从一种格式转换为另一种格式的问题。 我有一个(希望如此)简单的问题,但我找不到答案。 我正在使用 Prime31 的游戏中心插件来处理回合制多人游戏。 在 Prime31 的插件中,他们要求您提供一个 byte[] 以发送给其他玩家。 (状态数据)所以问题是,将 List 转换为字节数组然后将它们从字节数组转换回来的好方法是什么?

作为参考,这是我需要的复杂类,稍后我可能需要添加更多成员,但不是任何不同的类型。 如果这样可以更轻松地将 PokerPlayers 列表转换为 byte[],那么 int 的列表(手中的牌)很容易成为 4 个单独的 int。 同样在此列表中不是固定长度,而是始终为 4-8。

public class PokerPlayer{   
    public string playerID;
    public string alias;
    public int wildCard;
    public List<int> cardsInHand;
    public int chips;   
}

我觉得当我看到答案时,我会因为没有早点看到答案而自责。 任何指向相关材料的指针/链接都会很好,我已经用类似(非常相似)但不完全相同的问题在谷歌上搜索了 3 个小时。

您可能想尝试序列化。

var binFormatter = new BinaryFormatter();
var mStream = new MemoryStream();
binFormatter.Serialize(mStream, myObjToSerialize);

//This gives you the byte array.
mStream.ToArray();

然后如果你想把字节数组转回一个对象:

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;

BinaryFormatter现在存在安全风险。 如果我找到一个不使用它的好方法,我会回来的

https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/5.0/binaryformatter-serialization-obsolete

编辑:这仍然是 Google 中的最高结果,所以我将展示我为摆脱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);
    }
}

如果您需要一个流而不是一个字节数组,那么离这里不远了

将数据转换为字节流(并返回)称为serialization (和反serialization )。

您可以使用BinaryFormatter类来执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM