36

所以我一直在浏览我们的代码库,我看到我们的一些 DTO 具有混合和匹配的[DataMember]属性[IgnoreDataMember]

过去,我们被告知,如果我们不希望 DTO 中的某些内容被序列化,就不要添加[DataMember]属性。然后我看到了另一个属性并做了一些挖掘,似乎这明确说明该属性不会被序列化。

现在我的问题是,哪个更好?添加 [IgnoreDataMember]或不添加任何内容。

我四处询问,似乎[IgnoreDataMember]是从一切都被序列化的日子开始的,你必须规定应该忽略什么(我相信.Net 2)。然后他们将其更改为相反的内容,您必须明确说明应该序列化的内容。现在看来,你可以两者兼得。

4

1 回答 1

68

我四处询问,似乎 [IgnoreDataMember] 是从一切都被序列化的日子开始的,你必须规定应该忽略什么(我相信 .Net 2)。然后他们将其更改为相反的内容,您必须明确说明应该序列化的内容。

实际上这并不完全正确。IIRC它一直都是:

  • 如果标记为 [DataContract],则只[DataMember]考虑标记的成员
  • 如果标记为[DataContract],则默认为所有内容,但您可以使用减去成员[IgnoreDataMember]

我通常只是省略[DataMember]那些我不想序列化的东西,但在许多方面[IgnoreDataMember]更明确——主要是为了维护者的利益。它说“我故意不序列化这个”,而不是“也许我知道这没有被序列化,但也许我只是忘了添加属性”。

要么会工作。

于 2013-11-14T11:25:02.897 回答