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

发布于 2024-09-10 08:23:47 字数 277 浏览 5 评论 0原文

如果字段的顺序不正确(无论这意味着什么),DataContractSerializer 是否可能错误地反序列化对象?

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

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

这对我来说毫无意义,但也许有人知道得更好。 ;)

Is it possible that DataContractSerializer wrongly deserializes an object if the fields are not in the "correct" (whatever that means) order?

The classes that I try to serialize/deserialize do not have order-attributes placed on fields/properties. Yet one of my fields always gets deserialized as null even though it has a non-null value (it actually contains a list of strings).

When I moved two XML elements in serialized file around to match the order in another XML example (for which deserialization worked without problems) everything started to work.

This makes no sense to me but maybe someone knows better. ;)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

狼性发作 2024-09-17 08:23:47

为了有资格通过 DataContractSerializer 进行正确的序列化/序列化,以下所有条件都必须为真。

  1. 必须序列化的类必须设置 SerializedAttributeDataContractAttribute
  2. 必须序列化的类的属性和字段需要设置DataMemberAttribute
  3. 可序列化属性或字段的数据类型必须是可序列化的(即具有公共构造函数并继承 ISerializable);
  4. 必须序列化的类必须实现IExtensibleDataObject
  5. 注意:可序列化字段可以是公共的,也可以是私有的。
  6. 会员必须按字母顺序排列或者您应该使用DataMemberAttribute顺序-property

因此,声明的顺序确实很重要。如果成员不按字母顺序排列,则会被跳过。查找StackOverflow 上的这个答案作为示例,也许它适用于你的情况。

To be eligible for correct serialization / serialization by the DataContractSerializer, all of the following must be true.

  1. The class that must be serialized must have SerializableAttribute or DataContractAttribute set;
  2. The properties and fields of the class that must be serialized require the DataMemberAttribute set;
  3. The datatype of the serializable property or field must be serializable (i.e., have a public ctor and inherit ISerializable);
  4. The class that must be serialized must implement IExtensibleDataObject;
  5. Note: serializable fields can be either public or private.
  6. Members must be in alphabetical order or you should use the Order-property of the DataMemberAttribute.

So, the order of the declaration does matter. If members are not in alphabetical order, they are skipped. Look up this answer at StackOverflow for an example, perhaps it applies to your case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文