Mono、带有 MarshalByRefObject 的可序列化对象
-
21-08-2019 - |
题
我正在尝试将 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
要解决此问题,您可以为您的类执行自己的自定义序列化。
不隶属于 StackOverflow