减少wcf字典类型的xml标记

时间:2011-04-19 11:13:20

标签: wcf xml-serialization

我正在开发一个返回对象数据的WCF方法,包括Dictionary属性。 XML包含大量标记,我想知道是否有减少标记的方法。

下面是Dictionary的当前XML输出示例:

<gases>
 <a:KeyValueOfstringfloat>
  <a:Key>CH4</a:Key> 
  <a:Value>40</a:Value> 
 </a:KeyValueOfstringfloat>
 <a:KeyValueOfstringfloat>
  <a:Key>CO2</a:Key> 
  <a:Value>60</a:Value> 
 </a:KeyValueOfstringfloat>
</gases>

对于添加到集合中的每个额外气体元素,添加额外的<a:KeyValueOfstringfloat>及其内容。是否可以将格式自定义为以下内容:

<gases>
 <key>value</key>
</gases>

提前致谢。

2 个答案:

答案 0 :(得分:0)

有两个选项,但两者都涉及不为您的集合使用.NET Dictionary类型。给定您想要的输出look at the accepted answer to this question.

否则,如果您需要简单的XML,则需要使用简单的类结构。定义包含名为key的属性的气体类,该属性是字符串数组。我很确定生成的soap XML可能看起来像你显示的那样。

在这两种情况下,这可能不是你真正想要的。我猜测XML中的关键元素需要针对每个键/值对进行不同,但您应该能够设计类来处理这个问题(例如,创建一个具有名称和值字符串属性的项类)。如果你想使用气体类作为字典,你就可以编写代码来完成它。

更新:以下是CollectionDataContract属性可配置的示例:

[CollectionDataContract(
    Name = "Cities",
    ItemName = "city",
    KeyName = "cityName",
    ValueName = "population")]
public class CityList
    : IDictionary<string, int>,
      IEnumerable<System.Collections.Generic.KeyValuePair<string, int>>
{
/// snipped
}

答案 1 :(得分:0)

也许并不完全是你想要的东西,但通过电线GZip-ing消息将有很大帮助