Serializable和DataContract(不是?)
我在新项目中阅读了一些代码,发现前开发人员正在使用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;}
自动生成的属性(例如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场景都可以正常工作。
- ASP.NET Web服务器无法启动,Mono环境无法切换
- 如何在C#中对齐控件和工具提示消息的右边缘
- 错误:无法加载DLL’。dll’:找不到指定的模块。 (来自HRESULT的exception:0x8007007E) – 这是什么错误?
- C#使用不同的用户凭据访问活动目录
- “Microsoft.Jet.OLEDB.4.0”提供程序未在本地计算机上注册
- SmtpException:仅为具有ASCII本地部分的电子邮件地址配置客户端或服务器
- 关系数据库和OO语言
- 在什么情况下Process.Start()方法返回false?
- ASP.NET vNext – MissingMethodException:找不到方法:Microsoft.CodeAnalysis.Diagnostic> EmitResult.get_Diagnostics()’