.net - 我可以使用 protobuf-net 在 Mono 中序列化一个对象(包含成员 : Dictionary, 列表...等)并在 MS.NET 中反序列化它,反之亦然?

标签 .net mono unity3d protobuf-net binaryformatter

我有一个在 MS.NET 上运行的服务器和一个在 Mono 上运行的客户端(这是一个 Unity3D 引擎),当我尝试 BinaryFormatter().Deserialize 像这样的对象时:

   [Serializable]   
    public class Simulator  
    {
        public IDictionary<int, Task> tasks = new Dictionary<int, Task>(); 

客户端找不到/加载类型:字典、列表...
在 MS.NET 下运行的相同“客户端代码”运行良好,即在反序列化期间没有任何异常。

正如我从 http://www.mono-project.com/FAQ:_Technical#Compatibility 中读到的那样这是一个常见问题:

“如果您正在序列化自己的类,那没有问题,因为您可以控制用于序列化的程序集和类。
但是,如果您从框架中序列化对象,则不能保证序列化兼容性,因为这些对象的内部结构可能不同。在不同的 MS.NET 版本或 Mono 版本之间甚至无法保证这种兼容性。”

ProtoBuf-Net 是否有助于避免/解决此序列化/反序列化问题?

最佳答案

是的,像 protobuf-net 这样的外部序列化工具可以解决这个问题 - 事实上,一旦你在平台之间进行序列化(C++ 到 java 到 python 到 .net),框架版本就不再那么重要了。

所以是的:在 .NET 上加载时,在单声道/统一的 protobuf-net 中序列化的数据完全兼容。不过需要注意的是BinaryFormatter和 protobuf-net 不是直接的 1:1 等价物——每个都有略微不同的特性和行为。例如,protobuf-net 不会遍历事件/委托(delegate),并且通常不能很好地处理仅称为“对象”的事物。但是,完全支持字典和列表等关键/常见场景。

关于.net - 我可以使用 protobuf-net 在 Mono 中序列化一个对象(包含成员 : Dictionary, 列表...等)并在 MS.NET 中反序列化它,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12504275/

相关文章:

button - Unity3d 4.6 GUI - 单击按钮脚本从预制件中消失

c# - 第一次尝试时如何选择打开 Unity 游戏的显示器

unity3d - Unity 中完全黑暗的场景

c# - .NET - 终结器和退出(0)

c# - 在没有 Visual Studio 的情况下从 EF6 中的 Model.edmx 生成模型代码

c# - Mono 网络服务和基本身份验证

.net - Mono/Ironpython 中的尾调用优化

c# - 如何通过契约(Contract)定义 IEnumerable 行为?

c# - 如何将文件从 MemoryStream 上传到 FTP 服务器

c# - 在 gridview 中动态填充列标题