实际上,我认为您可以通过比较动态(JSON)语言和静态(XML)语言之间的差异来发现 XML 和 JSON 之间的许多相似之处。
基本上,XML 是一种更严格、更严格的序列化格式,可以选择使用附带的模式(XSD 或 DTD)进行验证。XSD 非常复杂,允许您描述许多不同的类型,例如日期、时间、枚举、用户定义类型,甚至类型继承等等。SOAP 有效地构建在 XML 特性集之上,提供了通过 WSDL 描述 Web 服务(例如类型和操作)的标准化方法。WSDL 规范的冗长性和复杂性意味着它的开发可能更加繁琐,但同时有更多的工具可供您使用,而且大多数现代语言都提供自动化工具来生成客户端代理,从而在尝试与外部服务进行互操作时减轻了一些负担。(尽管与此同时,我发现在处理频繁变化的 Web 服务时,生成的代理本身也是一种负担)。
如果你有一个定义良好的“企业服务”,不需要经常更改,或者你的 Web 服务需要从许多不同的语言访问,我仍然建议你使用 XML 作为你的 Web 服务。
尽管 XML 有诸多好处,但也有不足之处。它依赖于命名空间来提供类型化的可扩展格式,并允许您在同一文档中指定属性和元素。
在一个文档中使用不同的名称空间意味着在使用 Xml 解析器提取数据时,需要提供想要检索/遍历的每个元素的名称空间。它还可以外推有效载荷,使其比实际需要的更加冗长。
具有输出属性和元素的选项意味着您的类不能很好地映射到 XML 文档。仅仅这些特性就使它不适合大多数语言的编程,从而使其工作起来更加乏味和麻烦。微软已经在他们的数据合同序列化器中认识到并简化了这一点,方法是去掉 XML 属性,只将类的属性映射到 XML 元素。
我有一些 可用的 northwind 数据库基准测试来比较微软 XML 和 JSON 实现之间的大小和速度。基本上 XML 的大小是 JSON 的2倍以上,但是同时看起来微软在优化他们的 XML DataContractSerializer 方面投入了很多精力
它比他们的 JSON 快30% 以上。似乎你必须在规模和性能之间做出权衡。不满意这个事实,我决定编写我自己的快速 JsonSerializer,它现在比 MS 的 XML 快2.6倍——所以这两个世界都是最好的:)。