2011-04-19 20 views
2

我正在開發一個返回對象數據的WCF方法,其中包括一個Dictionary屬性。 XML包含大量的標記,我想知道是否有減少標記的手段。減少wcf字典類型的xml標記

下面是用於解釋當前XML輸出的一個例子:添加到集合,一個額外的<a:KeyValueOfstringfloat>與加入其含量沿

<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> 

對於每個額外的氣體元素。是否有可能根據以下幾行自定義格式:

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

在此先感謝。

回答

0

有幾個選項,但都涉及不使用.NET字典類型爲您的集合。給定你想要的輸出,look at the accepted answer to this question.

否則,如果你想要簡單的XML,你需要使用一個簡單的類結構。定義一個氣體類,其中包含一個名爲key的屬性,該屬性是一個字符串數組。我很確定所產生的soap XML可能看起來像你所顯示的。

在這兩種情況下,這可能不是你真正想要的。我猜測XML中的關鍵元素對於每個鍵/值對都需要不同,但您應該能夠設計您的類來處理這個問題(例如,創建一個具有名稱和值字符串屬性的項目類)。如果你想用氣體類作爲詞典來工作,你需要編寫代碼來完成它。

更新:這裏是的CollectionDataContract屬性如何配置是一個例子:你要找的不完全是,但用gzip荷蘭國際集團在電線的消息將有很大的幫助

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

collectiondatacontract是否允許沒有基於集合的成員包含在同一個數據合同中,還是需要單獨的數據合同,那麼兩者都是在messagecontract中實現的? – Unflux 2011-04-19 13:36:35

+0

不知道你在問什麼,但下面的鏈接爲你提供了使用CollectionDataContract屬性所需要知道的一切。鏈接:http://msdn.microsoft.com/en-us/library/aa347850.aspx – 2011-04-19 14:46:14

0

也許

+0

已經討論了通過電線壓縮數據的想法,但是,我們希望探索其他選項作爲設備上的資源與之互動是有限的。它可能是,雖然壓縮是更合適的選擇。所有的想法都很受歡迎,所以非常感謝您的意見。 [: – Unflux 2011-04-19 13:35:31