sam*_*sam 171 wcf datacontract datamember datacontractserializer
我DataContract对WCF中的属性非常困惑.据我所知,它用于序列化类似用户定义的类型.我写了一个类,这个类在客户端公开.
[DataContract]
public class Contact
{
[DataMember]
public int Roll { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Address { get; set; }
[DataMember]
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但是当我删除DataContract并且DataMember它也工作正常.我无法理解为什么它正常工作.谁能告诉我实际用途是DataContract什么?
我的服务合同是这样的
[ServiceContract]
public interface IRestServiceImpl
{
[OperationContract]
Contact XmlData(string id);
}
Run Code Online (Sandbox Code Playgroud)
mar*_*c_s 348
由于很多程序员都不知所措的[DataContract]和[DataMember]属性,使用.NET 3.5 SP1中,微软对数据合同串行处理所有的类-即使没有任何这些属性的-就像旧的XML序列化.
因此,作为.NET 3.5 SP1,您不须添加数据合同或数据成员属性了-如果你不那么数据契约序列化器将序列化所有的公共属性的类,就像XML序列化会.
但是:通过不添加这些属性,您将失去许多有用的功能:
[DataContract],您无法为您的数据定义XML命名空间[DataMember],您无法序列化非公共属性或字段[DataMember],则无法定义序列化(Order=)的顺序,DCS将按字母顺序序列化所有属性[DataMember],你不能为你的属性定义一个不同的名称(Name=)[DataMember],你不能定义像IsRequired=或其他有用的属性[DataMember],你不能遗漏某些公共财产 - 所有公共财产将由DCS序列化因此,对于一个"quick'n'dirty"解决方案,省去[DataContract]和[DataMember]属性将起作用 - 但是将它们放在数据类上仍然是一个好主意 - 只是为了更清楚地了解你正在做什么,并给自己访问除了它们之外你没有得到的所有其他功能......
Pra*_*ari 13
就WCF而言,我们可以通过消息与服务器和客户端进行通信.为了传输消息,从安全角度来看,我们需要以序列化格式制作数据/消息.
对于序列化数据,我们使用[datacontract]和[datamember]属性.
在您的情况下,如果您正在使用datacontractWCF,则使用DataContractSerializerWCF XmlSerializer,这是默认的序列化技术.
让我详细解释一下:
基本上WCF支持3种类型的序列化:
XmlSerializer: - 默认顺序与类相同
DataContractSerializer/NetDataContractSerializer: - 默认顺序为按字母顺序排列
XmlSerializer: - XML Schema非常广泛
DataContractSerializer/NetDataContractSerializer: - XML Schema受到约束
XmlSerializer: - 不可能支持版本控制
DataContractSerializer/NetDataContractSerializer: - 可以支持版本控制
XmlSerializer: - 与ASMX的兼容性
DataContractSerializer/NetDataContractSerializer: - 与.NET Remoting的兼容性
XmlSerializer: - XmlSerializer中不需要属性
DataContractSerializer/NetDataContractSerializer: - 此序列化所需的属性
所以你用的东西取决于你的要求......
数据协定是服务和客户之间的正式协议,它抽象地描述要交换的数据.也就是说,为了进行通信,客户端和服务不必共享相同的类型,只需要相同的数据合同.对于每个参数或返回类型,数据协定精确定义了要交换的序列化(转换为XML)的数据.
Windows Communication Foundation(WCF)默认使用名为Data Contract Serializer的序列化引擎来序列化和反序列化数据(将数据转换为XML或从XML转换).所有.NET Framework基元类型(例如整数和字符串)以及作为基元(如DateTime和XmlElement)处理的某些类型都可以序列化而无需其他准备工作,并且被视为具有默认数据协定.许多.NET Framework类型也有现有的数据协定.
| 归档时间: |
|
| 查看次数: |
124637 次 |
| 最近记录: |