【问题标题】:Is it possible to use EmitDefaultValue 'sometimes' using the DataContractSerializer in .NET?是否可以在 .NET 中使用 DataContractSerializer 来使用 EmitDefaultValue 'sometimes'?
【发布时间】:2012-03-15 17:45:03
【问题描述】:

有没有办法在运行时为 .NET 中的 DataContractSerializer 有条件地指定 EmitDefaultValue?有什么解决方法吗?

例如,我很好奇是否可以将 EmitDefaultValue=false 用于 WCF 序列化,但我希望能够将 EmitDefaultValue=true 用于为外部接口生成的 XML,例如 print。

【问题讨论】:

  • XML 是使用 XmlSerializer 还是 DataContractSerializer? (很重要)
  • 具体来说,IIRC:DCS 支持 *Specified,XS 同时支持 *Specified 和 ShouldSerialize*(用于条件序列化)

标签: .net wcf serialization


【解决方案1】:

嗯,您可能有两个选择是使用data contract surrogateIObjectReference。我认为这两种方式对你来说都是多余的,但如果你真的,真的想最终支持这种情况,也许这是你愿意做出的牺牲。请注意,使用它们还会对性能、互操作性、通过模式公开等产生重大影响。

我还想指出,尽管我知道常见的动机是什么,但出于多种原因,不推荐您尝试执行的操作(EmitDefaultValue 为 false)。见Why is using [DataMember(EmitDefaultValue = false)] not recommended?

【讨论】:

  • 有趣。我将检查 IObjectReference。我曾简要研究过数据合同代理。我倾向于同意使用 EmitDefaultValue = false 隐藏了一些其他设计缺陷,例如过于臃肿的对象结构。在这种情况下,这些序列化对象的唯一外部接口是 print。
猜你喜欢
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2012-11-10
相关资源
最近更新 更多