2013-12-13 34 views
5

我有一个[DataContract]对象,它具有一些属性并使用DataContractJsonSerializer序列化为JSON。以特定格式序列化字典<string,string>

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

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

现在我需要的JSON模式是这样

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

你永远无法当然知道之前是什么值,它是一个Dictionary用户将设置键和值。

我在想如果这可能发生使用匿名类型,或者有我可以采取的配置来实现我的目标?

谢谢。

+0

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

回答

1

好吧,让我们说你有:

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

} 

然后你可以使用DataContractJsonSerializerSettingsUseSimpleDictionaryFormat设置为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()); 
    } 
+0

工作完美而简单。谢谢。 –

+0

对于Windows Phone 8不起作用。 –

+0

对于Windows Phone 8,我使用了Newtonsoft JSON序列化程序Nuget包。 http://james.newtonking.com/json –

相关问题