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

6

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

public class BankOperationResult
{        
    public int CurrentAmount { get; set; }
    public bool Success { get; set; }
}

并且与DataContract属性具有相同的类:

[DataContract]
public class BankOperationResult
{        
    [DataMember]
    public int CurrentAmount { get; set; }
    [DataMember]
    public bool Success { get; set; }
}

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

无论是否有这些属性,我的WCF服务都能正常工作...

谢谢,Pawel

1个回答

10

在 .NET 3.5 SP1 之前,如果您没有使用 DataMember 属性标记您的属性,那么它将不会在 WSDL 中公开并且不会被序列化。从 .NET 3.5 SP1 开始,DataContractSerializer 将自动包含所有公共属性,因此您不再需要使用此属性进行装饰。


13
很遗憾,在3.5 SP1版本的情况下,情况并不是那么简单,但这是基本思想。如果在类上没有定义任何DataContract或DataMember属性,则所有字段和属性都将被序列化为XML,包括自动属性的私有自动生成备份存储字段,例如 public int MyValue { get; set; } 这样的属性,并将它们命名为 <MyValue>k__BackingField。明确添加DataContract和DataMember属性将使DataContractSerializer放弃对私有字段的序列化。 - James Dunne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接