加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:52:27 所属栏目:百科 来源:网络整理
导读:我想将 JSON中的字典最终转换为C#字典,而不是很多. 我在这里使用JSON.NET库咆哮错误的树吗? JArray类不想给我任何东西来访问属性(只有值),即它告诉我值,但从不告诉我“键”. 我不敢相信没有人会发现这种限制,所以假设我错过了什么.我的混乱尝试是这样的:
我想将 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);

这是我的UnitTest:

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

这只适用于没有其他阵列的情况.

熊猫,

从詹姆斯·纽顿国王自己的问题来看,这是一个类似的问题:

// 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%肯定如何使用复杂的树结构)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读