DataContract和DataMember属性 - 它们如何影响类型

dra*_*fly 6 wcf datacontract

没有DataContract属性的类之间有什么区别:

public class BankOperationResult
{        
    public int CurrentAmount { get; set; }
    public bool Success { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和具有DataContract属性的同一个类:

[DataContract]
public class BankOperationResult
{        
    [DataMember]
    public int CurrentAmount { get; set; }
    [DataMember]
    public bool Success { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的意思是,WCF在编码等时会以不同的方式处理这两种类型吗?

有或没有这些属性我的WCF服务工作...

谢谢,Pawel

Dar*_*rov 10

在.NET 3.5 SP1之前,如果未使用DataMember属性标记属性,则它不会在WSDL中公开,也不会序列化.从.NET 3.5 SP1开始,DataContractSerializer将自动包含所有公共属性,因此您不再需要使用此属性来装饰它们.

  • 不幸的是,在3.5 SP1的情况下它并不是那么简单,但这是基本的想法.如果没有在您的类上定义任何DataContract或DataMember属性,则所有字段*和*属性将被序列化为XML,这包括用于自动属性的私有自动生成的后备存储字段`public int MyValue {get; 组; }`并将它们命名为`<MyValue> k__BackingField`.显式添加DataContract和DataMember属性将使DataContractSerializer放弃私有字段序列化. (13认同)