gpt4 book ai didi

c# - 使用 JSON.NET 访问 JSON 属性以创建 C# 字典

转载 作者:太空狗 更新时间:2023-10-29 20:59:53 24 4
gpt4 key购买 nike

我想轻松地将 JSON 中的字典转换为 C# 字典。
我在这里使用 JSON.NET 库是不是找错了树? JArray 类不想给我任何访问属性的东西(只有值),即它告诉我值而不是“键”。
我不敢相信没有其他人会发现这个限制,所以我假设我遗漏了一些东西。我糊涂的尝试是这样的:

给定这个 json:

{
"appSettings" : [
{"rows": "5"},
{"columns" : "7"}
]
}

我想将其选入这样的字典中:

var dict = jsonObject["appSettings"].Select(s => new 
{
key = s.Name, // wish this property existed
value = s.Value // wish this property existed
}).ToDictionary(s => s.key, s => s.value);

这是我的单元测试:

[Test]
public void CanLoadJsonAppSettings()
{
var json = @"
""{appSettings"" : [
{""ViewRows"" : ""1""},
{""ViewColumns"" : ""2""}
]}";
var dict = CreateJsonDictionary(json);
Assert.That(dict.Count, Is.EqualTo(2));
}

public CreateJsonDictionary(string jsonText)
{
var jsonObject = JObject.Parse(jsonText);

return jsonObject["appSettings"].Select(s => new
{
key = s.Name,
value = s.Value
}).ToDictionary(s => s.key, s => s.value);
}

编辑:感谢@jim,我们更接近了。为了完整起见,我将记录为获得所需对象而需要执行的略显笨拙的步骤:

我不得不更改我的 JSON。我没有使用数组(如上面的代码),而是使用了一个更简单/更真实的字典:

var json = @"
{
""appSettings"" : {
""ViewRows"" : ""1"",
""ViewColumns"" : ""2""
}
}";

然后我必须解析,得到一个 JSON JObject,然后转换回字符串,然后反序列化:

var jo = JObject.Parse(jsonText);
var appSettings = jo["appSettings"];
var appSettings = JsonConvert.DeserializeObject<Dictionary<string, string>>(appSettings.ToString());

所以我的部分问题是让 JSON 变得困惑。即便如此,如果有更优雅的方法来做到这一点,我会洗耳恭听。

EDIT2:我仍然必须解决上面的原始问题,将 JSON 数组转换为字典。一旦我的 JSON 被更正为包含正确的名称/值对:

"connectionStrings": [
{"name" : "string1", "value" : "value1"},
{"name" : "string2", "value" :"value2"},
]

这是解决它的代码(注意它看起来很像我最初的尝试):

var jsonObj = JObject.Parse(jsonText);
var conStrings = jsonObj.Properties().Select(s =>
new {
key = s.Name,
value = s.Value.ToString()
}).ToDictionary(s => s.key, s => s.value);

这只有在您没有其他阵列时才有效。

最佳答案

Pandas ,

James Newton King 本人逐字逐句地回答了类似的问题:

// Json.NET does this...

string json = @"{""key1"":""value1"",""key2"":""value2""}";
Dictionary<string, string> values
= JsonConvert.DeserializeObject<Dictionary<string, string>>(json);

你可以在这里找到线程:

How can I deserialize JSON to a simple Dictionary<string,string> in ASP.NET?

希望这会有所帮助(虽然不能 100% 确定它如何处理复杂的树结构)

关于c# - 使用 JSON.NET 访问 JSON 属性以创建 C# 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4848583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com