没有[DataMember]属性与具有[IgnoreDataMember]属性

时间:2013-11-14 11:17:29

标签: c# wcf

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

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

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

我已经四处询问,似乎[IgnoreDataMember]来自所有序列化的日子,你必须决定应该忽略什么(我相信.Net 2)。然后他们将其更改为反向,您必须明确说明应该序列化的内容。现在看来你可以做到这两点。

1 个答案:

答案 0 :(得分:50)

  

我已经四处询问,似乎[IgnoreDataMember]来自所有序列化的日子,你必须决定应该忽略什么(我相信.Net 2)。然后他们将其更改为反向,您必须明确说明应该序列化的内容。

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

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

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

要么工作。