序列化/反序列化对象 - 字段的顺序很重要?

mar*_*are 6 .net c# serialization xml-serialization datacontractserializer

DataContractSerializer如果字段不在"正确"(无论是什么意思)顺序中,是否可能错误地反序列化对象?

我尝试序列化/反序列化的类没有在字段/属性上放置顺序属性.然而,我的一个字段总是被反序列化,null即使它具有非空值(它实际上包含字符串列表).

当我在序列化文件中移动两个XML元素以匹配另一个XML示例中的顺序时(反序列化工作没有问题)一切都开始工作.

这对我没有意义,但也许有人知道的更好.;)

Abe*_*bel 15

要获得正确的序列化/序列化资格,DataContractSerializer以下所有条件必须为真.

  1. 必须序列化的类必须具有SerializableAttributeDataContractAttribute设置;
  2. 必须序列化的类的属性和字段需要DataMemberAttributeset;
  3. serializable属性或字段的数据类型必须是可序列化的(即,具有公共ctor并继承ISerializable);
  4. 必须序列化的类必须实现IExtensibleDataObject;
  5. 注意:可序列化字段可以是公共字段或私有字段.
  6. 会员必须按字母顺序排列,或者你应该使用Order-propertyDataMemberAttribute.

因此,声明的顺序的事情.如果成员不按字母顺序排列,则会跳过它们.在StackOverflow上查找这个答案的例子,也许它适用于你的情况.