使用JSON.NET访问JSON属性以创建C#字典
我想将
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%肯定如何使用复杂的树结构) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |