每当我遇到这个属性,我总是看到这样的用法:DataContract秘密行为?
[DataContract]
class DataTransferObject
{
[DataMember]
public int Value {get;set;}
}
而且在这个例子中所有继承的成员应适用的DataMember属性为每个属性或领域,这可能导致非常笨拙和poilerplate代码。但是,最近我发现(也许秘密功能?)用它的一个非常优雅的方式:
[DataContract]
public abstract class DTOBase
{
}
public class MyDTO : DTOBase
{
public int Value {get;set;}
public MyDTO(){} //important part is here
}
重要的部分:你应该总是明确定义参数构造函数,否则将无法正确序列化。
是的。它将序列化其所有公共成员,不管多深将继承,而无需将属性应用于成员或类定义。
这是不知何故记录在某处(我没有找到)?因为,我非常支持可以避免多少样板文件。