.net - 忽略 DataContractSerializer 中的字段顺序

标签 .net datacontractserializer

反序列化时,DataContractSerializer 不仅要求元素名称匹配,而且要求它相对于其他元素按特定顺序排列。

我的应用程序是这样的,每个字段都可以通过其名称唯一标识。因此,我希望 XML 文件能够以任何顺序包含元素并且反序列化器仍然可以工作。

是否可以像这样设置 DataContract?

Data Member Order中的介绍性段落建议该命令是可选的,但我还没有找到一种方法来实际使它可选。

后续问题 :Simple data file versioning with DataContractSerializer

最佳答案

不,这不是可选的。显式指定排序是可选的,否则顺序由您链接到的基本规则决定(首先是基本类型,字母,...)。

介绍性段落只是暗示您并不总是需要了解或关心订单 - 例如,如果您使用的是生成的代理。

如果您使用 DataContractSerializer 反序列化文件,我能想到的最佳解决方案是在反序列化之前使用 XSLT 将其转换为正确的顺序。

如果您正在调用 Web 服务(DataContractSerializer 的设计目的),您最好坚持契约(Contract)中的顺序。

关于.net - 忽略 DataContractSerializer 中的字段顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1513525/

相关文章:

c# - 使用 XSLT 转换序列化的 .net 对象

.net - 指示不是 WCF 数据契约(Contract)一部分的标准方法?

c# - 如何使用 DataContractSerializer 反序列化文件中的 WCF soap 响应消息?

c# - 自定义类包含另一个自定义类时的 DataContractResolver/KnownType 问题

.net - VBPROJ/CSPROJ

.net - 使用 Windows 窗体实现 MVC

c# - 如何将 ConcurrentDictionary 转换为字典?

c# - 没有组元素的列表的 CollectionDataContractAttribute

c# - 如何使用clearcanvas访问DICOM序列的所有内容

java - .NET Dictionary/IDictionary 的 Equals() 契约(Contract)与 Java Map 的 equals() 契约(Contract)