ton*_*yjy 11 .net c# wcf web-services
我在新项目中阅读了一些代码,发现前开发人员正在使用Serializable和DataContract.
[Serializable]
Run Code Online (Sandbox Code Playgroud)
和
[DataContract(Namespace="Some.Name.Space", IsReference = true)]
Run Code Online (Sandbox Code Playgroud)
我假设当存在DataContract属性时,WCF将忽略Serializable.这是正确的假设吗?如果没有,同时使用两者有什么好处?
Eug*_*sky 17
是的,[Serializable]如果[DataContract]存在则被忽略.这对于例如创建将具有用于WCF的一个序列化投影的类型以及用于.NET Remoting的另一个投影(如果由于遗留原因它与WCF一起使用)可能是有用的.
UPDATE:我只是遇到了一个情况,我自己的代码,其中两个[DataContract]和[Serializable]是必要的.假设你有一个类与一群自动生成的属性(例如public int Foo {get; set;}要使用)都在ASP.NET的ViewState并在ASP.NET Web API JSON端点(使用要么Newtonsoft JSON序列化或DataContractSerializer的).要使ViewState起作用,您需要使用该类 [Serializable].但是,这会破坏JSON序列化,从而导致JSON {"_k_BackingField123":456}而不是{"Foo":456},因为在[Serializable]模型中,自动生成的属性支持字段将被序列化而不是属性本身.但是,如果你也添加[DataContract]到类型(和[DataMember] 对于它的属性),ViewState和JSON场景都能很好地工作.
| 归档时间: |
|
| 查看次数: |
4510 次 |
| 最近记录: |