加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 可序列化和DataContract(不对?)

发布时间:2020-12-15 17:40:02 所属栏目:百科 来源:网络整理
导读:我正在阅读我的新项目中的一些代码,发现前开发者正在使用Serializable和DataContract. [Serializable] 和 [DataContract(Namespace="Some.Name.Space",IsReference = true)] 我假设当有一个DataContract属性时,WCF将忽略Serializable.这是正确的假设吗?如果
我正在阅读我的新项目中的一些代码,发现前开发者正在使用Serializable和DataContract.
[Serializable]

[DataContract(Namespace="Some.Name.Space",IsReference = true)]

我假设当有一个DataContract属性时,WCF将忽略Serializable.这是正确的假设吗?如果没有,同时使用两者的好处是什么?

解决方法

是的,如果[DataContract]存在,[Serializable]将被忽略.这可能对于例如创建一个类型,它将为WCF提供一个序列化投影,另一个用于.NET Remoting的投影(如果由于旧的原因而与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方案都可以正常工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读