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

时间:2012-09-19 23:29:07

标签: .net mono unity3d protobuf-net binaryformatter

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

所以是的:当在.NET上加载时,在mono / unity上的protobuf-net中序列化的数据是完全兼容的。但是,应该注意BinaryFormatter和protobuf-net 直接1:1当量 - 每个都有不同的特征和行为。例如,protobuf-net不会遍历事件/委托,并且通常不会很好地处理仅称为“对象”的事物。但是,完全支持字典和列表等关键/常见方案。