2017-05-23 56 views
0

我們創建了一個返回KeyValuePair的WCF方法。按照標準,每個字段的名稱或標籤都是鍵或值。我們的廣管局詢問是否可以更改該服務,以便服務返回名稱爲CountyKey和CountyName而不是Key和Value。這甚至有可能嗎?如何更改在KeyValuePair中返回的值的名稱/標籤

enter image description here

+4

您可以隨時使用這些屬性創建並使用一個新類,而不是KVP。這是一個不可接受的或不合意的解決方案? – Amy

+3

使用「CountryKey」和「CountryName」屬性創建一個類,然後使用它。否則,取決於你如何序列化的東西,你可以在那裏改變它。 –

+0

根據他們爲什麼要這樣做,也許最好將響應捕獲到名爲'Country'的屬性或字段中。然後,對於一個屬性,你應該有:'someObject.Country.Key'或者一個局部變量,它只是'country.Key'。 –

回答

1

的一種方式,以填補這一要求是寫出具有這些字段的自定義類:

public class CountryKVP<TKey, TValue> 
{ 
    public TKey CountryKey { get; } 
    public TValue CountryValue { get; } 

    public CountryKVP(TKey key, TValue value) 
    { 
     CountryKey = key; 
     CountryValue = value; 
    } 

    public CountryKVP(KeyValuePair<TKey, TValue> input) 
    { 
     CountryKey = input.Key; 
     CountryValue = input.Value; 
    } 
} 

然後,您可以從WCF方法直接通過這個類

CountryKVP<string, string> country = client.WebSvcThatReturnsCountryKVP();  

或者,在消費方面,您可以通過將返回的KeyValuePair傳遞給構造函數來初始化它:

var country = new CountryKVP<string, string>(client.WebSvcThatReturnsKVP); 

// Now use the properties: 
Console.WriteLine("{0} = {1}", country.CountryKey, country.CountryValue); 

而且,因爲我們正在處理一個單一KeyValuePair這裏,通常你只能將其分配給一個叫Country屬性,然後訪問KeyValue,如:

var someObject = new ObjectWithCountryProperty(); 

someObject.Country = client.WebSvcThatReturnsKVP(); 

// Now use the properties: 
Console.WriteLine("{0} = {1}", someObject.Country.Key, someObject.Country.Value);