2017-05-23 2 views
0

KeyValuePairを返すWCFメソッドを作成しました。標準では、各フィールドの名前またはラベルはKeyまたはValueのいずれかです。私たちのBAは、サービスがKeyとValueではなくCountyKeyとCountyNameのような名前を返すように変更できるかどうかを尋ねています。これも可能ですか?その要件を満たすために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); 
関連する問題