问题
When deserializing, DataContractSerializer requires not only that an element name matches, but also that it is in a certain order with respect to the other elements.
My application is such that every field can be uniquely identified by its name. I would therefore like it to be possible for the XML file to contain the elements in any order and for the deserializer to still work.
Is it possible to set up a DataContract like this?
The introductory paragraph in Data Member Order suggests that order is enforced optionally, but I haven't found a way to actually make it optional.
Follow-up question: Simple data file versioning with DataContractSerializer
回答1:
No it's not optional. It's optional to explicitly specify an ordering, but otherwise the order is determined by the basic rules you linked to (base types first, alphabetic, ...).
The introductory paragraph is simply implying that you don't always need to know or care about the order - for example if you are using a generated proxy.
If you're using DataContractSerializer to deserialize a file, the best solution I can think of would be to use XSLT to transform it into the correct order before deserializing.
If you're calling a web service (what DataContractSerializer was designed for), you're better off sticking to the order in the contract.
来源:https://stackoverflow.com/questions/1513525/ignore-field-order-in-datacontractserializer