使用DataContractJsonSerializer将Dictionary序列化为JSON对象

时间:2013-12-13 09:01:22

标签: c# json serialization dictionary

我有一个[DataContract]对象,它有一些属性,并使用DataContractJsonSerializer序列化为JSON。

其中一个属性是Dictionary<string, string>类型,当序列化发生时,它会生成以下JSON模式。

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

现在我需要JSON模式就像这样

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

当然,您无法在知道值之前知道,用户将设置键和值为Dictionary

我在想是否可以使用匿名类型进行此操作,还是我可以采取配置来实现目标?

谢谢。

1 个答案:

答案 0 :(得分:1)

好吧,假设你有:

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

}

然后您可以使用DataContractJsonSerializerSettings并将UseSimpleDictionaryFormat设置为true,如下所示:

    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());
    }