首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >何时使用DataContract和DataMember属性?

何时使用DataContract和DataMember属性?
EN

Stack Overflow用户
提问于 2011-01-29 19:49:27
回答 3查看 144.6K关注 0票数 191

我对WCF中的DataContract属性感到非常困惑。据我所知,它用于序列化用户定义的类型,如类。我写了一个在客户端公开的类,如下所示。

代码语言:javascript
复制
[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; }
}

它工作正常,但当我删除DataContractDataMember时,它也能正常工作。我不明白为什么它能正常工作。谁能告诉我DataContract的实际用途是什么?

我的服务合同如下所示

代码语言:javascript
复制
[ServiceContract]    
public interface IRestServiceImpl
{
    [OperationContract]        
    Contact XmlData(string id);      
}
EN

回答 3

Stack Overflow用户

发布于 2011-01-29 20:20:05

数据契约是服务和客户端之间的正式协议,抽象地描述了要交换的数据。也就是说,为了通信,客户端和服务不必共享相同的类型,只需共享相同的数据契约即可。数据协定精确地为每个参数或返回类型定义了要交换的序列化(转换为XML)的数据。

默认情况下,Windows Communication Foundation (WCF)使用称为数据协定序列化程序的序列化引擎来序列化和反序列化数据(与XML相互转换)。所有.NET框架原语类型(如整数和字符串)以及某些被视为原语的类型(如DateTime和XmlElement )无需其他准备即可序列化,并被视为具有默认数据协定。许多.NET框架类型也具有现有的数据契约。

你可以找到完整的文章here.

票数 8
EN

Stack Overflow用户

发布于 2013-03-07 13:01:04

另外,当你从http请求调用时,它会正常工作,但当你尝试从net.tcp调用时,你会得到所有这类东西

票数 0
EN

Stack Overflow用户

发布于 2016-12-27 18:09:14

DataMember属性不是添加到序列化数据的强制属性。当没有添加DataMember属性时,旧的XMLSerializer会序列化数据。添加DataMember提供了一些有用的属性,如order,name,isrequired,这些属性不能以其他方式使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4836683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档