我对WCF中的DataContract
属性感到非常困惑。据我所知,它用于序列化用户定义的类型,如类。我写了一个在客户端公开的类,如下所示。
[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; }
}
它工作正常,但当我删除DataContract
和DataMember
时,它也能正常工作。我不明白为什么它能正常工作。谁能告诉我DataContract
的实际用途是什么?
我的服务合同如下所示
[ServiceContract]
public interface IRestServiceImpl
{
[OperationContract]
Contact XmlData(string id);
}
发布于 2011-01-29 20:20:05
数据契约是服务和客户端之间的正式协议,抽象地描述了要交换的数据。也就是说,为了通信,客户端和服务不必共享相同的类型,只需共享相同的数据契约即可。数据协定精确地为每个参数或返回类型定义了要交换的序列化(转换为XML)的数据。
默认情况下,Windows Communication Foundation (WCF)使用称为数据协定序列化程序的序列化引擎来序列化和反序列化数据(与XML相互转换)。所有.NET框架原语类型(如整数和字符串)以及某些被视为原语的类型(如DateTime和XmlElement )无需其他准备即可序列化,并被视为具有默认数据协定。许多.NET框架类型也具有现有的数据契约。
你可以找到完整的文章here.
发布于 2013-03-07 13:01:04
另外,当你从http请求调用时,它会正常工作,但当你尝试从net.tcp调用时,你会得到所有这类东西
发布于 2016-12-27 18:09:14
DataMember属性不是添加到序列化数据的强制属性。当没有添加DataMember属性时,旧的XMLSerializer会序列化数据。添加DataMember提供了一些有用的属性,如order,name,isrequired,这些属性不能以其他方式使用。
https://stackoverflow.com/questions/4836683
复制相似问题