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

Jer*_*ter 15 c# entity-framework

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

Lad*_*nka 16

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

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

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

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

  • 添加`DataContract`属性后,您必须**使用`DataMember`属性标记要序列化的属性.我描述的默认序列化只有在你根本不使用`DataContract`属性时才有效. (5认同)
  • 但是我将[DataContract]添加到我的类中,我可以从WCF操作返回它...但是内容是空白的,所以我将[DataMember]添加到几个属性中,然后突然返回那些(并且只有那些)在序列化结果中.那么为什么不是我的工作,因为你说默认情况下返回所有属性? (3认同)