当您可以使用 XDocument 时,为什么要使用 xsd.exe 工具为 XSD 模式创建类,然后使用序列化器创建 XML 文件。
我是否应该始终使用XDocument
并通过嵌套元素手动创建 XML 文档XElement
,或者是否存在我没有看到的使得使用 XSD 模式更好XmlSerializer
的东西。
当您可以使用 XDocument 时,为什么要使用 xsd.exe 工具为 XSD 模式创建类,然后使用序列化器创建 XML 文件。
我是否应该始终使用XDocument
并通过嵌套元素手动创建 XML 文档XElement
,或者是否存在我没有看到的使得使用 XSD 模式更好XmlSerializer
的东西。
XDocument
和XmlSerializer
/xsd.exe
对于不同类型的事物有用。当您处理大型 XML 文档时,您确实应该有一个 XSD 架构。这是各方之间就 XML 文档的结构、属性 / 子项 / 数据类型等达成的协议。
如果您有 XSD,那么您也可以使用它来生成 C# 类。您可以手写
XDocument
代码,但随后您需要不断参考 XSD 来查看您应该访问哪些属性/子项以及它们的数据类型。如果 XSD 发生变化,您必须手动搜索代码以XDocument
查找需要更改的内容。相反,如果您生成 C# 类,那么您可以访问的属性及其数据类型就在类型系统中:您无需引用 XSD。如果 XSD 发生变化,您可以重新生成 C# 类,并在需要更改的地方获取编译器错误。
如果您有 XSD,您还应该验证收到的 XML 文档是否与该 XSD 匹配,例如参见此答案。
XmlSerializer
通常也比 更有效XDocument
。但是,有时您需要使用其他人的 XML 文档,并且要么没有 XSD,要么生成的 C# 类比您需要的复杂得多。或者有时您只是在做一些非常简单的事情,不值得编写 XSD。或者有时 XML 做了一些非常烦人的事情,无法很好地映射到 C# 类。在这些情况下,使用
XDocument
通常是更好的选择。(您应该不惜一切代价避免的一件事是
XmlDocument
——它的作用与 相同XDocument
,但更糟糕。)