【问题标题】:WCF datacontract vs class serializeWCF 数据契约与类序列化
【发布时间】:2011-01-18 08:55:51
【问题描述】:

我知道如果我们使用数据契约,我们可以对一个类进行更多控制,但是,请考虑以下两种情况

[DataContract]
public class Customer
{
    [DataMember]
    public string CustomerName {get; set;}

    [DataMember]
    public int Age{get; set;}
}

public class Customer
{
    public string CustomerName {get; set;}
    public int Age{get; set;}
}

它们都在 .net 客户端上正确序列化。我个人不使用第二个例子。有人能指出这两个班级的区别吗?我的意思是发送两个类中的所有公共属性。

【问题讨论】:

  • @decyclone 非常感谢您的布局修复,我尝试了几次,但仍然遇到烦人的第一行空白问题。

标签: wcf datacontract


【解决方案1】:

第二个版本是数据协定的 POCO(普通旧 CLR 对象)版本,自 3.5 sp1 起可与 WCF 一起使用。

我不建议使用它,因为它几乎不能让您对序列化(命名空间属性...)进行控制,并且它将您的服务实体与您的业务实体(可以与 POCO 相同)耦合起来

【讨论】:

  • 第二个版本会被wsdl公开吗?
  • @Yuan:WCF 3.5 SP1之后,是的。
【解决方案2】:

无论如何,这里有一个来自“Programming WCF services, 3rd Edition”的更好的故事

使用 Serializable 属性时 是可行的,它不适合 面向服务的交互 客户和服务。而不是 将类型中的所有成员表示为 可序列化,因此是 该类型的数据模式,它将是 最好采用选择加入的方法, 只有合同成员 开发人员希望明确包括 包含在数据合同中。这 Serializable 属性强制数据 类型可序列化,以便 用作合同中的参数 操作,它不提供清洁 使用能力之间的分离 作为 WCF 操作参数的类型 (类型的“服务性”方面) 以及序列化它的能力。这 属性不支持 别名类型名称或成员,或 将新类型映射到预定义 数据合同。属性操作 直接在成员字段和 完全绕过任何逻辑 用于访问这些的属性 字段。最好允许 那些属性来添加它们的值 访问字段时。最后, 没有直接支持 版本控制,因为格式化程序 据称捕获所有版本控制 信息。因此,它是 难以处理版本控制 时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多