.net - DataContract 与 XmlType

标签 .net xml wcf

作为尝试学习 WCF 的一部分,我正在阅读有关序列化的内容。我正在努力了解如何在 .NET 3.5 中控制序列化。例如,我有一个带有一些公共(public)属性的简单类。通过将 DataContract 属性添加到该类,我可以在序列化时控制命名空间和类的名称。

另一方面,我可以添加 Serializable 属性(甚至可能不是必需的)和 XmlType 属性,这也允许我控制命名空间和用于序列化类的名称。

我实现了这两种方法,并将 ServiceContract 中的类用作接口(interface)调用的一部分。然后,我使用 Http 分析器查看各种对象是如何序列化的,我注意到 XmlType 根本不影响 http 中的 xml。

我一整天都在试图理解这一点。我错过了什么?

更新: 我确实理解两者之间的区别以及它们存在的原因。我只是不明白为什么我不能用 XmlType 或(只是试过 XmlRoot)影响生成的 xml。

基本上,您可以通过实现 IXmlSerializable 来控制序列化的所有细节,但顶级元素的 namespace 和名称除外。为此,我假设您需要 XmlType 或 XmlRoot 属性。我错了吗?

最佳答案

DataContractSerializer 的要点是控制序列化的细节。相反,我们的想法是将您的数据序列化为一种可以被最多客户端使用的形式。

与其关注模式的细节,不如根据要发送和接收的数据成员定义数据契约。它是对数据的非常抽象的描述。它被序列化为一种非常简单的格式,反射(reflect)了抽象描述。

只有在您绝对需要控制要序列化或反序列化的 XML 的细节时,才应使用 XML 序列化程序。当您不需要那么多控制时,请坚持使用 Data Contract Serializer。

关于.net - DataContract 与 XmlType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/624111/

相关文章:

c# - 我的第一个 WCF 服务器 - 为什么 OperationContext.Current 为空?

wcf - 如何在.NET Core 3.1中从F#访问WCF服务?

c# - 使用 Dispatcher 切换到 UI 线程的正确语法

.net - 是否有用户友好的Log4Net日志文件查看器?

java - 通过指定其属性来打印 XML 元素

java - XML 解析失败

C# 使用 .ToList() 将 IEnumerable 转换为 IList?

c# - WCF 配置 hell ?

java - 如何从 hibernate 映射文件生成 Jaxb-XML-Beans?

c# - WCF 消息 :How to remove the SOAP Header element?