如何将 Dictionary<string,string> 添加到现有 JSON.Net 的 JObject?

Posted

技术标签:

【中文标题】如何将 Dictionary<string,string> 添加到现有 JSON.Net 的 JObject?【英文标题】:How do I add a Dictionary<string,string> to an existing JSON.Net's JObject? 【发布时间】:2013-03-06 22:28:42 【问题描述】:

我有一个通过解析一些 JSON 文本创建的 JObject(使用 JSON.Net)。我直接操作,在这个 JObject 的顶层添加键。当我添加的值是一个字符串时,我没有问题:

json["newkey"] = "New Value"; // works

但如果我能弄清楚如何添加字典,我会被诅咒的,例如:

Dictionary<string,string> dict = new Dictionary<string,string>();
dict["one"] = "1";
dict["two"] = "2";
json["dict"] = dict;          // fails

我已经进行了相当多的谷歌搜索和阅读 JSON.Net 文档,但一切似乎都是为了将​​ JSON 文本转换为 JObject,或者使用序列化将 .NET 对象编写为 JSON 文本。或者使用一些花哨的 LINQ 语句来处理复杂对象的各种事情......

我已经尝试了这些,但没有一个有效:

json["dict"] = new JObject(dict);
json["dict"] = new JObject((Dictionary<string,string>)dict);
json["dict"] = new JArray(dict);  // desperation sets in :)
json["dict"] = (JObject)dict;     // please dear god let this work

我遇到的大多数最新错误是:

无法确定 System.Collections.Generic.KeyValuePair`2[System.String,System.String] 类型的 JSON 对象类型。

【问题讨论】:

【参考方案1】:

我相信您正在寻找这样的东西:

json["dict"] = JObject.FromObject(dict);

【讨论】:

【参考方案2】:

你可以使用一个绝望的“hack”,它并不漂亮(做两次同样的事情)但它有效:)

  json["dict"] = JObject.Parse(JsonConvert.SerializeObject(dict));

【讨论】:

在这种情况下,您的 json 是序列化字符串,而不是对象。

以上是关于如何将 Dictionary<string,string> 添加到现有 JSON.Net 的 JObject?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Dictionary<string, string> 变量从后面的代码传递到 asp.net?

如何将 Dictionary<string,string> 添加到现有 JSON.Net 的 JObject?

如何使用 System.Text.Json 将 json 字符串或流反序列化到 Dictionary<string,string>

如何将 C# 中的 Dictionary <string,List<string>> 转换为带有键作为标题的 csv?

将 Dictionary<string,string> 存储在应用程序设置中

将 [Dictionary<String,Any?>] 转换为 [Dictionary<String,Any!>] ?迅速 3