使用DataContractJsonSerializer将字典序列化为JSON对象

9

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

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

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

现在,我需要JSON模式是这样的:
"extra_data": { 
        "aKey": "aValue"
}

当然,在用户设置键和值时,您永远无法知道值是什么,这是一个字典

我在思考是否可以使用匿名类型来实现此目标,或者是否有配置可以采取来实现我的目标?

谢谢。


1
重复问题: https://dev59.com/P2855IYBdhLWcg3wFAHy - Konrad Kokosa
1个回答

3

好的,假设你有以下内容:

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

1
工作完美而简单。谢谢。 - George Taskos
1
我在Windows Phone 8中使用了Newtonsoft JSON序列化程序包Nuget。http://james.newtonking.com/json - George Taskos
1
我完全没有DataContractJsonSerializerSettings(运行在.NET 4.5上),它就不存在。 - Ted
3
你好,当我在代码中创建服务主机时,我应该在哪里用这个序列化器替换“普通”序列化器? - flayn
1
DataContractJsonSerializerSettings在.NET 4.0中不可用。 - Isuru Madusanka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接