2013-12-13 21 views
5

[DataContract]オブジェクトはいくつかのプロパティを持ち、DataContractJsonSerializerを使用してJSONにシリアル化されています。特定の形式の辞書<string、string>をシリアライズ

プロパティの1つがタイプDictionary<string, string>であり、シリアル化が発生したときに次のJSONスキーマが生成されます。

"extra_data": [ 
    { 
    "Key": "aKey", 
    "Value": "aValue" 
    } 
] 

は今、私はあなたが、もちろんそれは、ユーザがキーと値を設定しますDictionaryで、値が何であるか前に知ることはできません。この

"extra_data": { 
     "aKey": "aValue" 
} 

ようになりJSONスキーマを必要としています。

これは匿名型を使用して発生する可能性がある場合、または私の目標を達成するために取ることができる設定がありますか?

ありがとうございます。

+0

http://stackoverflow.com/questionsの重複/ 4547550/c-sharp-json-custom-serialization –

答えて

1

[OK]を、あなたは持っているとしましょう:

[DataContract] 
public class MyObject 
{ 
    [DataMember(Name = "extra_data")] 
    public Dictionary<string, string> MyDictionary { get; set; } 

} 

次にあなたがtrueにDataContractJsonSerializerSettingsUseSimpleDictionaryFormatとのセットを使用することができ、このような何か:

var myObject = new MyObject { MyDictionary = new Dictionary<string, string> { { "key1", "value1" }, { "key2", "value2" } } }; 

    DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true }; 

    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(MyObject), settings); 

    var result = string.Empty; 

    using (MemoryStream ms = new MemoryStream()) 
    { 
     serializer.WriteObject(ms, myObject); 

     result = Encoding.Default.GetString(ms.ToArray()); 
    } 
+0

完璧かつシンプルに作業しました。ありがとうございました。 –

+0

Windows Phone 8では動作しません。 –

+0

Windows Phone 8の場合は、Newtonsoft JSONシリアライザのNugetパッケージを使用しました。 http://james.newtonking.com/json –

関連する問題