.net的最佳序列化库,能够正确反序列化继承

时间:2009-01-24 16:19:02

标签: .net serialization

我需要一个.net的序列化库,其功能比默认的xml序列化程序更好。 问题是它不是多态的 - 比如说你有B类:A {},并且序列化了一个B类,你应该可以在它上面调用一个myBaseType = Deserialize(xml)并返回一个B类型的实例myBaseType变量。

我在http://refactormycode.com/codes/710-polymorphic-xml-serializer有一个实现,其中包含序列化库应该能够处理的单元测试。如果要序列化的对象具有也是多态序列化类型的子类型,则此实现将不起作用,因此我需要更好的东西。

谢谢!

3 个答案:

答案 0 :(得分:1)

如果您可以处理序列化程序的额外详细程度,该序列化程序将类型信息嵌入到结果流中可能是最好的。

.Net提供了SoapFormatter,它过于冗长并且做了一些你可能不需要的东西,但是当你反序列化它时它只会给你一些适当的对象(不需要指定一个类型只是强制转换)你知道它的类型的根对象。)

作为附带福利,它将正确处理对象图中的循环和共享引用。

答案 1 :(得分:0)

您可以使用.NET的二进制序列化程序,还是需要使用XML?我有一个关于.NET的XML处理的类似列表,特别是在尝试序列化图形而不是树木时。

在我需要XML正常工作的地方,我最终只为每个类推出了自己的序列化代码。

答案 2 :(得分:0)

protobuf-net支持大多数继承路由(即使规范没有)。有一个已知的故障(我正在研究它;-p) - 但它涵盖了大多数选项。