C# 哪一个更好地处理版本控制?XmlSerializer与DataContractSerializer?

C# 哪一个更好地处理版本控制?XmlSerializer与DataContractSerializer?,c#,xml-serialization,C#,Xml Serialization,需要序列化对象,并且在反序列化时可能会更改程序集版本。此外,对象可能会发生一些变化 XmlSerializer不存储类型信息,如果对象稍有更改,它不会失败,但XmlSerializer无法从我无法用属性标记的超类序列化私有或内部属性。 所以我看了一下DataContractSerializer。它看起来很好,因此,超级类的私有/内部属性问题将得到解决,所有属性都必须标记,我不需要它们,但是类型信息呢?如果删除、重命名或添加某些属性,DataContractSerializer的行为如何?仍然可以

需要序列化对象,并且在反序列化时可能会更改程序集版本。此外,对象可能会发生一些变化

XmlSerializer不存储类型信息,如果对象稍有更改,它不会失败,但XmlSerializer无法从我无法用属性标记的超类序列化私有或内部属性。
所以我看了一下DataContractSerializer。它看起来很好,因此,超级类的私有/内部属性问题将得到解决,所有属性都必须标记,我不需要它们,但是类型信息呢?如果删除、重命名或添加某些属性,DataContractSerializer的行为如何?

仍然可以根据您的需要使用XmlSerializer。但是您必须使用
IXmlSerializable
接口实现自定义序列化逻辑。

我对DataContractSerializer进行了测试,看起来DataContractSerializer对对象更改非常宽容,因此我将使用这种方法。

这没有标记为WCF问题,但事实上,您谈论的是DataContractSerializer,这让我觉得您是在WCF中工作的。如果是这种情况,那么在查看IExtensibleDataObject接口时可能会出现问题

参考:


您可能还对NetDataContractSerializer感兴趣,它专门用于.NET对象NetDataContractSerializer存储序列化对象的解释类型定义。因为我们使用强命名,所以如果我们尝试用另一个程序集版本反序列化对象,会导致很多问题。