2

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

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


在类中找不到System.Runtime.Serialization.SerializationException字段“MarshalByRefObject+__identity”

反序列化是通过 BinaryFormatter 完成的:

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

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

任何帮助/建议将不胜感激^_^

4

1 回答 1

4

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

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

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

于 2009-07-02T19:06:43.897 回答