首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字典或列表转换为byte[]

将字典或列表转换为byte[]
EN

Stack Overflow用户
提问于 2014-04-10 03:49:57
回答 3查看 41K关注 0票数 14

好的,我在这里和unity论坛上看到了许多类似的问题,询问如何从一种格式转换为另一种格式。我有一个(希望)简单的问题,我只是找不到答案。我正在使用Prime31的游戏中心插件来处理一个基于回合的多人游戏。在Prime31的插件中,他们会要求你提供一个byte[]来发送给其他播放器。(状态数据)所以问题是,什么是将列表转换为字节数组,然后再将其从字节数组转换回来的好方法?

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

代码语言:javascript
复制
public class PokerPlayer{   
    public string playerID;
    public string alias;
    public int wildCard;
    public List<int> cardsInHand;
    public int chips;   
}

我感觉当我看到答案的时候,我会因为没有更快地看到答案而给自己一记耳光。任何指向相关材料的指针/链接都会很甜蜜,我已经在谷歌上搜索了整整3个小时,有相似(如此相似)但又不完全相同的问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-10 03:56:47

您可能希望尝试序列化。

代码语言:javascript
复制
var binFormatter = new BinaryFormatter();
var mStream = new MemoryStream();
binFormatter.Serialize(mStream, myObjToSerialize);

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

然后,如果您想将字节数组转换回对象:

代码语言:javascript
复制
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发出警告,因为它“不安全,而且无法保证安全”。

有关更多详细信息,请阅读aka.ms/binaryformatter

首选替代

.NET提供了几个内置序列化程序,可以安全地处理不受信任的数据:

票数 39
EN

Stack Overflow用户

发布于 2021-02-09 01:51:44

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

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

编辑:这仍然是谷歌的最高搜索结果,所以我将展示我为摆脱BinaryFormatter所做的工作

您需要Newtonsoft.Json

代码语言:javascript
复制
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);
    }
}

如果您需要的是流而不是字节数组,那么从这里开始并不是很远

票数 5
EN

Stack Overflow用户

发布于 2014-04-10 03:59:59

将数据转换为字节流(和反序列化)称为serialization (和反序列化)。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22972607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档