使用MarshalByRefObject的Mono,Serializable对象

时间:2009-07-02 16:13:38

标签: c# serialization mono marshalbyrefobject

我正在尝试将C#应用程序移植到.NET(客户端服务器),并且遇到序列化问题。

Linux客户端序列化和对象,但Windows服务器无法反序列化,给出错误:

System.Runtime.Serialization.SerializationException
在类

中找不到字段“MarshalByRefObject + __ identity”

反序列化通过BinaryFormatter完成:

BinaryFormatter formatter = new BinaryFormatter();
formatter.Deserialize(data);

有问题的类具有Seri​​alizable属性,并且继承自MarshalByRefObject。如果我删除MarshalByRefObject的继承,它工作正常。在Windows中一切正常,所以我假设这是Mono特定的问题。

非常感谢任何帮助/建议^ _ ^

1 个答案:

答案 0 :(得分:4)

二进制序列化依赖于私有实现细节。在您的情况下,私有字段__identity。因为Mono开发人员无法访问私有实现细节,所以这些偶尔不匹配,因此.Net和Mono之间的二进制序列化并不总是兼容。

请使用Mono提交测试用例: http://www.mono-project.com/Bugs

要解决此问题,您可以为您的班级执行自己的自定义序列化。