DataContractSerializer,EmitDefaultValue和空标签

时间:2009-09-24 01:35:50

标签: .net xml datacontractserializer

我正在努力通过mvc网站序列化一些对象并通过xml,json等返回内容,我正在寻找不发送空元素的最佳方法。

在一个完美的世界中,简单地将EmitDefaultValue:= False附加到DataContract中的DataMembers就足够了,但在某些情况下,它只是不会飞。

String默认为Nothing,但如果它们是Nothing或String.Empty,我不想序列化它们。列表和集合也是如此。我不希望他们序列化,如果他们什么都没有,或者他们是空的,数量为0。

似乎有一些不那么漂亮的选择。

  1. 自定义XmlTextWriter缓存自身并删除空元素
  2. 在序列化对象之前,循环执行道具,将Empty设置为Nothing,将Count-0设置为Nothing
  3. 删除空元素的XSLT
  4. 出路时正则输出字符串
  5. 所有这些似乎都是邪恶的,1是最不邪恶的,但却是微不足道的事情。还有其他一些技巧吗?

1 个答案:

答案 0 :(得分:0)

答案是数据契约序列化程序并不是为了让您能够如此多地控制XML的格式。这不是它的意思。如果你需要这么多控件,那么你需要使用XML Serializer,你可能需要实现IXmlSerializable。

或者,您可以重新查看不希望序列化这些“空”对象的原因。你可能会觉得不值得花时间。