首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Serializable和DataContract (非and?)

Serializable和DataContract (非and?)
EN

Stack Overflow用户
提问于 2010-11-23 03:20:40
回答 1查看 4.9K关注 0票数 11

我正在阅读我的新项目中的一些代码,发现前开发人员正在一起使用Serializable和DataContract。

代码语言:javascript
复制
[Serializable]

代码语言:javascript
复制
[DataContract(Namespace="Some.Name.Space", IsReference = true)]

我假设当有DataContract属性时,WCF会忽略Serializable。这是一个正确的假设吗?如果不是,同时使用这两种方法有什么好处?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-23 03:29:33

是,如果存在[DataContract],则忽略[Serializable]。这可能有助于创建一个类型,该类型将具有一个用于WCF的序列化投影,以及另一个用于.NET远程处理的投影(如果由于遗留原因,它与WCF一起使用)。

更新:我在自己的代码中遇到了[DataContract][Serializable]都需要的情况。假设您有一个类,其中包含一组自动生成的属性(例如public int Foo {get; set;}),您希望在ASP.NET ViewState和ASP.NET Web API JSON端点(使用Newtonsoft JSON序列化器或DataContractSerializer)中使用这些属性。要让ViewState正常工作,您需要将类设置为[Serializable]。但是,这破坏了JSON序列化,导致类似于{"_k_BackingField123":456}而不是{"Foo":456}的JSON,因为在[Serializable]模型中,自动生成的属性支持字段被序列化,而不是属性本身。但是,如果您还将[DataContract]添加到类型(以及将[DataMember]添加到其属性),则ViewState和JSON方案都可以完美地工作。

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

https://stackoverflow.com/questions/4249334

复制
相关文章

相似问题

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