对于标有属性[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,对吧?
答案 0 :(得分:2)
不,看起来你没有正确阅读文档。
DataContracts是一种公开共享信息的方式,与常规序列化略有不同。
从您链接的文档页面:
然后必须将DataMemberAttribute属性应用于数据协定类型的每个成员,以指示它是数据成员,即应该序列化。
但这仅适用于您添加[DataContract]
属性的情况。
答案 1 :(得分:1)
有趣的是链接说:
默认情况下,DataContractSerializer会推断数据协定并序列化所有公开可见的类型。所有公共读/写属性和类型的字段都是序列化的。
在我的应用程序中,我发现包含[DataMember]
的仅属性被序列化。公共getter / setter的公共属性不会被序列化,除非我特意在其上添加[Datamember]
。
要解决您的具体问题,我会将所有3个字段标记为[DataMember]
,而complexType
类也应标记为[DataContract]
。