因此,我一直在通过我们的代码库,我看到一些我们的DTO具有[DataMember]
和[IgnoreDataMember]
属性的混合和匹配。没有[数据成员]属性与具有[IgnoreDataMember]属性
过去,我们已经被告知如果我们不想在DTO中序列化某些东西,根本不要添加[DataMember]
属性。然后我看到了其他属性并做了一些挖掘,似乎明确指出该属性不会被序列化。
现在我的问题是,哪个更好?添加[IgnoreDataMember]
或者不添加任何内容。
我问了一遍,似乎[IgnoreDataMember]
是从一切都被序列化的时代,你必须指定什么应该忽略(我相信.Net 2)。然后他们将其改变为相反的,你必须明确说明应该序列化什么。现在看来你可以做到这一点。
还有:“IgnoreDataMemberAttribute属性仅在与未标记类型一起使用时才有效。如果在同一个类上使用'[DataContract]'和'[IgnoreDataMember]',后者将被忽略。 –
@MichaelEdenfield是迂腐的,'DataContractSerializer'默认为*所有公共字段和属性*(公共字段非常罕见);甚至有点含糊不清。例如,如果我们谈论的是'NetDataContractSerializer',那么它默认为*所有字段*(公共和私人),但没有属性 –
我知道这是一个旧线程,但昨天我遇到了一个问题,表明Edenfield先生说并不完全如此。 我有一个领域,4个属性的类。所有4个属性都转换某种形式的数据(例如字节数组,字符串或其他形式)并将其写入一个字段。我用DataContract属性标记了该类,并只将该字段标记为DataMember。但是,这样解串器不会忽略这些属性,而是将它们设置为默认值(这会覆盖该字段)。将[IgnoreDataMember]添加到解决问题的属性中。所以它不会被忽略 –