Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ignore field order in DataContractSerializer

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

like image 765
Roman Starkov Avatar asked Oct 03 '09 11:10

Roman Starkov


1 Answers

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.

like image 184
Joe Avatar answered Nov 03 '22 18:11

Joe