Ste*_*fan 7 .net c# serialization xml-serialization
我编写了一个可以打开/编辑/保存文档的桌面应用程序.
这些文档由几个不同类型的对象描述,这些对象存储彼此的引用.当然,有一个Document类作为此数据结构的根.
问题是如何将此文档模型保存到文件中.
XmlSerializer - >失败了第一个和最后一个标准.BinarySerializer - >失败了第二个标准.
DataContractSerializer:与XmlSerializer类似,但支持循环(递归)引用.它的设计也考虑了(向前/向后)兼容性:数据合同版本控制.[编辑]
NetDataContractSerializer:虽然DataContractSerializer仍然需要提前知道所有类型(即它不能很好地继承),NetDataContractSerializer会在输出中存储类型信息.除此之外,两者似乎是等价的.[编辑]
protobuf-net:没有时间尝试它,但它似乎在功能上与DataContractSerializer类似,但使用二进制格式.[编辑]
当静态和动态类型不同时,似乎有两种关于该做什么的哲学(如果你有一个类型为object的字段,但是a,比方说,其中包含Person-object).基本上动态类型必须以某种方式存储在文件中.
对不同的动态类型使用不同的XML标记.但是,由于要用于特定类的XML标记可能不等于类名,因此如果反序列化器事先知道所有可能的类型(以便他可以扫描它们的属性),则只能使用此路由.
在序列化期间存储CLR类型(类名,程序集名称和版本).在反序列化期间使用此信息来实例化正确的类.在反序列化之前不得知道这些类型.
第二个更易于使用,但生成的文件将依赖于CLR(并且对代码修改不太敏感).这可能是为什么XmlSerializer并DataContractSerializer选择第一种方式.NetDataContractSerializer不推荐,因为它使用第二个approch(BinarySerializer顺便说一下).
有任何想法吗?