2009-10-03 78 views
26

反序列化时,DataContractSerializer不仅要求元素名称匹配,还要求它相对于其他元素具有特定顺序。忽略DataContractSerializer中的字段顺序

我的申请是这样的,每个领域可以由其名称唯一标识。因此,我希望XML文件可以按任意顺序包含元素,并且解串器仍然可以工作。

是否可以像这样设置DataContract?

Data Member Order中的介绍性段落暗示强制执行订单(可选),但我还没有找到实际使其成为可选项的方法。

后续问题Simple data file versioning with DataContractSerializer

回答

17

不,这不是可选的。明确指定排序是可选的,否则排序由您链接的基本规则(基本类型第一,字母,...)决定。

介绍性段落仅仅意味着您并不总是需要知道或关心订单 - 例如,如果您使用的是生成的代理。

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

如果您打电话给Web服务(DataContractSerializer的设计目的是什么),您最好坚持合同中的订单。

+4

我只是将一个新的值添加到现有的文件。我不得不在正确的名字中插入它,而且在正确的位置插入。 – 2009-10-03 11:44:16