0

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

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

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

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

  1. 自定义XmlTextWriter缓冲并丢弃空元素
  2. 在对象被序列化之前,循环遍历 prop,将 Empty 设置为 Nothing,将 Count-0 设置为 Nothing
  3. 删除空元素的 XSLT
  4. 正则表达式输出字符串的输出

所有这些似乎都有些邪恶,1 是最不邪恶的,但要做的事情微不足道。有没有其他的技巧呢?

4

1 回答 1

0

答案是 Data Contract Serializer 并不是要让您对 XML 的格式进行如此多的控制。这不是它的目的。如果您需要这么多的控​​制,那么您需要使用 XML Serializer,并且您可能需要实现 IXmlSerializable。

或者,您可以重新审视您不想序列化这些“空”对象的原因。你可能会发现这不值得你花时间。

于 2009-09-25T22:47:06.163 回答