专用字段的C#DataContract属性

本文关键字:属性 C#DataContract 字段 专用 | 更新日期: 2023-09-27 18:20:22

对于用属性[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类,对吧?

专用字段的C#DataContract属性

不,您似乎没有正确阅读文档。

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

从文档页面链接:

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

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

有趣的是,链接上写着:

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

在我的应用程序中,我发现只有包含[DataMember]属性被序列化。具有公共getter/setter的公共属性不会被序列化,除非我特别在它们上面放了[Datamember]


为了解决您的具体问题,我会用[DataMember]标记所有3个字段,并且complexType类也应该标记为[DataContract]