在没有所有属性的情况下设置DataContract和DataMember
我发现[DataContract]
和[DataMember]
属性有点乱,宁愿用配置方法中的代码做一些事情。 这可能吗?
您根本不必使用这些属性。 DataContractSerializer
将使用getter和setter序列化所有公共属性,但是在序列化具有导航属性的实体的情况下,由于“循环引用”,您将很容易以exception结束。
要避免该exception,您必须在实体类上使用[DataContract(IsReference = true)]
,在每个要进行serilize的属性上使用DataMember
,或者在不希望序列化的每个属性上使用IgnoreDataMember
。
最后一个也是最复杂的选项是完全避免属性和实现IDataContractSurrogate
自定义类来控制类型之外的序列化。
您还可以编写完全自定义的序列化过程,或使用XML序列化或二进制序列化及其所有要求。
不,DataContractSerializer是一个选择性序列化器 – 你必须告诉它你想要包含什么。
对于其他序列化程序,您需要使用NonSerializedAttribute或XmlIgnoreAttribute之类的东西来告诉序列化程序不要管它。