我认为[DataContract]
和[DataMember]
属性有点混乱,我更愿意使用配置方法或其他方式来实现。这样做是否可行?
我认为[DataContract]
和[DataMember]
属性有点混乱,我更愿意使用配置方法或其他方式来实现。这样做是否可行?
您不必使用这些属性。 DataContractSerializer
将序列化所有具有 getter 和 setter 的公共属性,但是如果要序列化具有导航属性的实体,则很容易出现“循环引用”异常。
为了避免该异常,您必须在实体类上使用 [DataContract(IsReference = true)]
,并在要序列化的每个属性上使用 DataMember
,或者在不想序列化的每个属性上使用 IgnoreDataMember
。
最后一种也是最复杂的选择是完全避免使用属性,而是使用自定义类实现 IDataContractSurrogate
来控制类型外的序列化。
您还可以编写完全自定义的序列化过程,或使用 XML 序列化或二进制序列化及其所需的所有要求。
DataContract
属性,就必须使用DataMember
属性标记要进行序列化的属性。我所描述的默认序列化仅在根本不使用DataContract
属性时才有效。 - Ladislav Mrnka我知道这是一个相当老的帖子,但我来到这里想知道是否有一种方法可以在某些具有公共字段且没有getter和setter的旧代码上自动设置所有成员属性。
使其看起来稍微整洁一点的方法是缩短DataMember的名称:
using DM = System.Runtime.Serialization.DataMemberAttribute;
[DataContract]
public class SomeClass
{
[DM] public bool IsMO;
[DM] public string LabCode;
[DM] public string OrderNumber;
}