【问题标题】:DataContract & DataMember attributes - how they affect typeDataContract 和 DataMember 属性 - 它们如何影响类型
【发布时间】:2009-11-27 22:06:03
【问题描述】:

没有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 服务都可以工作...

谢谢,帕维尔

【问题讨论】:

    标签: wcf datacontract


    【解决方案1】:

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

    【讨论】:

    • 不幸的是,在 3.5 SP1 的情况下,它并不是相当那么简单,但这就是基本思想。如果没有在您的类上定义任何 DataContract 或 DataMember 属性,所有字段 和 属性都将被序列化为 XML,这包括用于自动生成的私有后备存储字段 public int MyValue { get; set; } 形式的自动属性,并将命名他们<MyValue>k__BackingField。显式添加 DataContract 和 DataMember 属性将使 DataContractSerializer 放弃私有字段序列化。
    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    相关资源
    最近更新 更多