2017-07-17 1 views
0

PythonアプリケーションからHTTP経由で受け取ったJSON辞書をC#のDictionaryにデシリアライズしたいとします。WCF DataContract:JSONオブジェクトをC#辞書にマッピングする

{ 
    "native_dict": { 
     "foo": 0, 
     "bar": 1 
    }, 
    "obj_dict": [ 
     {"Key": "foo", "Value": 0}, 
     {"Key": "bar", "Value": 1}, 
    ] 
} 

それは辞書を渡すの2つの試みが含まれています

JSONオブジェクトは、次のようになります。最初はネイティブなJSON形式で、2番目の形式はC#で必要な形式のようです。

両方が、このXML形式に変換されます:私のアプリケーションで

<root type="object"> 
    <value type="object"> 

    <native_dict type="object"> 
     <bar type="number">1</bar> 
     <foo type="number">0</foo> 
    </native_dict> 

    <obj_dict type="array"> 
     <item type="object"> 
     <Value type="number">0</Value> 
     <Key type="string">foo</Key> 
     </item> 
     <item type="object"> 
     <Value type="number">1</Value> 
     <Key type="string">bar</Key> 
     </item> 
    </obj_dict> 

    </value> 
</root> 

私はこれらのDataContractsを試してみました:それらの

[DataContract] 
public class MyDto 
{ 
    [DataMember(Name = "native_dict")] 
    private Dictionary<string, int> MyDict1 { get; set; } 

    [DataMember(Name = "obj_dict")] 
    private MyDictionary<string, int> MyDict1 { get; set; } 
} 

[CollectionDataContract 
    (Name = "obj_dict", 
    ItemName = "item" 
    KeyName = "Key", 
    ValueName = "Value")] 
public class MyDictionary: Dictionary<string, int> { } 

なしに解決することはできません。

シリアライザを書き換えずに、シリアライザがJSONオブジェクトをDictionaryに変換するために使用できるDataContractを定義する方法はありますか?

答えて

0

私は通常、あなたのケースでは辞書の代わりにリストを使用します。 List型のプロパティを作成します。ここで、objectItemは、キーと値を独自のプロパティとして持つクラスです。 WCF datacontractは、着信json文字列をc#リストオブジェクトに逆シリアル化します。

+0

残念ながら、リストを使用することは私がしたいことではありません。ディクショナリは、私のインターフェイスをユーザーにとって使いやすくします。 – Corbie

関連する問題