在没有所有属性的情况下设置DataContract和DataMember

我发现[DataContract][DataMember]属性有点乱,宁愿用配置方法中的代码做一些事情。 这可能吗?

您根本不必使用这些属性。 DataContractSerializer将使用getter和setter序列化所有公共属性,但是在序列化具有导航属性的实体的情况下,由于“循环引用”,您将很容易以exception结束。

要避免该exception,您必须在实体类上使用[DataContract(IsReference = true)] ,在每个要进行serilize的属性上使用DataMember ,或者在不希望序列化的每个属性上使用IgnoreDataMember

最后一个也是最复杂的选项是完全避免属性和实现IDataContractSurrogate自定义类来控制类型之外的序列化。

您还可以编写完全自定义的序列化过程,或使用XML序列化或二进制序列化及其所有要求。

不,DataContractSerializer是一个选择性序列化器 – 你必须告诉它你想要包含什么。

对于其他序列化程序,您需要使用NonSerializedAttribute或XmlIgnoreAttribute之类的东西来告诉序列化程序不要管它。