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

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

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

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

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

相关类具有 Serialized 属性,并且继承自 MarshalByRefObject。如果我删除 MarshalByRefObject 的继承,它就可以正常工作。在 Windows 中一切正常,因此我假设这是 Mono 特定的问题。

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

有帮助吗?

解决方案

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top