我可以同时使用 DataContract 和 Serializable 吗?

Posted

技术标签:

【中文标题】我可以同时使用 DataContract 和 Serializable 吗?【英文标题】:Can I use DataContract and Serializable together? 【发布时间】:2011-07-21 06:47:47 【问题描述】:

我正在开发 WCF 服务。我的所有类都已经使用 [Serializable] 属性进行序列化,但由于“k__BackingField”属性命名问题,我使用了 DataContract 和 DataMember 属性。 所以我可以像下面这样一起使用这两个属性吗:

[Serializable]
[DataContract]
public class User


  [DataMember]
  public string Name  get; set; 

  [DataMember]
  public int UserID  get; set; 

这对吗?

我在这里也得到了类似的解决方案。 C# automatic property deserialization of JSON

Serializable and DataContract (not versus?)

【问题讨论】:

【参考方案1】:

我在MSDN上找到了一篇文章,据此我们可以同时使用属性DataContract和Serializable。

使用 [Serializable],所有字段都成为数据协定的一部分(除非它们被标记为 [NonSerialized])。使用 [DataContract],仅包含标有 [DataMember] 的成员。请注意,如果一个类型同时具有 [DataContract] 和 [Serializable] 属性,它将使用 [DataContract] 映射

http://msdn.microsoft.com/en-us/magazine/cc163569.aspx

【讨论】:

【参考方案2】:

如果问题在于命名,为什么不使用

[XmlElement(ElementName = "Name")]
public string Name  get; set;  

【讨论】:

以上是关于我可以同时使用 DataContract 和 Serializable 吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以用它代替 Serializable 的 DataContract

为啥我不能在同一个类上使用 WCF DataContract 和 ISerializable?

DataContract XML 序列化和 XML 属性

DataContract在没有DataContractAttribute的情况下工作(直到混淆)

有没有办法从 DataContract 导出 XSD 架构

数据契约[DataContract]