我正在阅读我的新项目中的一些代码,发现前开发人员同时使用 Serialized 和 DataContract。
[Serializable]
and
[DataContract(Namespace="Some.Name.Space", IsReference = true)]
我假设当存在 DataContract 属性时 WCF 将忽略 Serialized。这是一个正确的假设吗?如果不是,同时使用两者有什么好处?
Yes, [Serializable]
被忽略,如果[DataContract]
存在。这可能对例如有用创建一种类型,该类型将具有一个用于 WCF 的序列化投影和另一个用于 .NET Remoting 的投影(如果由于遗留原因与 WCF 一起使用)。
UPDATE:我刚刚在我自己的代码中遇到了一种情况,[DataContract]
and [Serializable]
是必要的。假设您有一个带有一堆自动生成的属性的类(例如public int Foo {get; set;}
)你想要使用的both在 ASP.NET ViewState 和 ASP.NET Web API JSON 端点(使用 Newtonsoft JSON 序列化器或 DataContractSerializer)中。为了使 ViewState 工作,您需要该类[Serializable]
。然而,这会破坏 JSON 序列化,导致 JSON 像{"_k_BackingField123":456}
代替{"Foo":456}
,因为在[Serializable]
模型自动生成的属性支持字段被序列化,而不是属性本身。但是,如果您also add [DataContract]
到类型(和[DataMember]
到其属性),ViewState 和 JSON 场景都可以完美运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)