WCF datacontract vs class serialize

时间:2011-01-18 08:55:51

标签: wcf datacontract

据我所知,如果我们使用datacontract,我们可以在类上有更多控件,但是,请考虑以下2种情况

[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客户端上正确序列化。我个人不用第二个例子。任何人都可以指出我在两个班级的差异吗?我打算发送这两个类中的所有公共属性。

2 个答案:

答案 0 :(得分:5)

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

我不建议使用它,因为它使您对序列化(名称空间属性...)几乎没有控制权,并且它将您的服务实体与您的业务实体(可以与POCO相同)相结合

答案 1 :(得分:4)

无论如何,这是“编程WCF服务,第3版”的更好的故事

  

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