作为尝试学习WCF的一部分,我正在阅读序列化.我正在努力了解如何在.NET 3.5中控制序列化.例如,我有一个带有一些公共属性的简单类.通过将DataContract属性添加到该类,我可以控制命名空间和类序列化时的名称.
另一方面,我可以添加Serializable属性(可能甚至不需要)和XmlType属性,这也允许我控制命名空间和用于序列化类的名称.
我实现了这两种方法,并在ServiceContract中使用该类作为接口调用的一部分.然后我使用Http分析器来查看各种对象是如何被serizal化的,我注意到XmlType根本不影响http中的xml.
我整天都试图理解这一点.我错过了什么?
更新: 我确实理解两者之间的区别以及它们存在的原因.我只是不明白为什么我不能用XmlType影响生成的xml或者(只是试过它XmlRoot).
基本上,您可以通过实现IXmlSerializable来控制序列化的所有细节,除了名称空间和顶级元素的名称.为此,我假设您需要XmlType或XmlRoot属性.我错了吗?
DataContractSerializer的要点是不控制序列化的细节.相反,我们的想法是将您的数据序列化为可由最大数量的客户端使用的表单.
可以根据要发送和接收的数据成员来定义数据协定,而不是关注模式的细节.这是一个非常抽象的数据描述.它被序列化为一种非常简单的格式,反映了抽象的描述.
只有在您绝对需要控制要序列化或反序列化的XML的详细信息时,才应使用XML Serializer.当您不需要那么多控制时,请坚持使用Data Contract Serializer.