私有字段的C#DataContract属性?

时间:2012-01-16 17:11:25

标签: c# datacontract

对于标有属性[DataContract]的类,应将其序列化的私有字段标记为[DataMember]吗?

示例:

[DataContract]
public class Component
{

// [DataMember] is not needed since public fields get automatically serialized
public int number;

// do I need [DataMember] here?
private string characters;

// [DataMember] is required here, but I also need to include the 
// attribute [DataMember] in this class's definition
private complexType cT;

我正确地阅读DataContractAttribute Class,对吧?

2 个答案:

答案 0 :(得分:2)

不,看起来你没有正确阅读文档。

DataContracts是一种公开共享信息的方式,与常规序列化略有不同。

从您链接的文档页面:

  

然后必须将DataMemberAttribute属性应用于数据协定类型的每个成员,以指示它是数据成员,即应该序列化。

但这仅适用于您添加[DataContract]属性的情况。

答案 1 :(得分:1)

有趣的是链接说:

  

默认情况下,DataContractSerializer会推断数据协定并序列化所有公开可见的类型。所有公共读/写属性和类型的字段都是序列化的。

在我的应用程序中,我发现包含[DataMember]属性被序列化。公共getter / setter的公共属性不会被序列化,除非我特意在其上添加[Datamember]


要解决您的具体问题,我会将所有3个字段标记为[DataMember],而complexType类也应标记为[DataContract]