使用JSON.NET解析JSON键/值对

28

我有一个 .NET 项目,正在使用 JSON.NET 库。我需要使用这个库来解析一些 JSON 数据。我的 JSON 数据长这样:

{"1":"Name 1","2":"Name 2"}

该对象实际上只是一组键值对列表。我正在尝试弄清如何使用JSON.NET来1)解析此JSON并2)遍历键值对。是否有方法可以做到这一点?如果有,怎么做?

我看到的唯一方法是将其反序列化为一个强类型对象。

非常感谢!


你生成了这个 JSON 吗?键名永远是 1 和 2 吗? - mason
你在使用JSON.NET方面尝试了什么?看起来你应该能够将其解析为JObject,或者非常容易地将其转换为Dictionary<string, string>... - Jon Skeet
请发布一些您尝试过的代码,以便我们可以更好地帮助您。 - Biscuits
这个问题看起来像是同一个硬币的另一面:http://stackoverflow.com/questions/29635808/serialize-objects-as-json#29635808 - Vaccano
3个回答

70
您可以反序列化为Dictionary<string,string>
var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
foreach(var kv in dict)
{
    Console.WriteLine(kv.Key + ":" + kv.Value);
}

由于 JObject 实现了 IDictionary 接口,您也可以简单地使用 JObject.Parse

var dict = JObject.Parse(@"{""1"":""Name 1"",""2"":""Name 2""}");

6
以下是具有键值对的子评分的JSON内容:
{  
"data": [    
{      
"id": "288560300",      
"lang": "en", 

"subratings":     {     

"Cleanliness": "5",

"Sleep Quality": "5",

"Service": "5"
  }
}
]}

public void LoadJsonKeyValuePair(string json)
{  
Rootobject item = JsonConvert.DeserializeObject<Rootobject>(json);
}

public class Rootobject
{
[JsonProperty("data")]
public List<Datum> data { get; set; }
}

public class Datum
{
[JsonProperty("id")]
public string id { get; set; }
[JsonProperty("lang")]
public string lang { get; set; }
[JsonProperty("subratings")]
public Dictionary<string, object> subratings { get; set; }
}

您可以使用Newtonsoft.Json来反序列化此对象。

1
你能解释一下如何使用这个例子列出键值对吗?我的设置类似,但我不清楚怎样获取现有的键值对。 - Autonomic
能否从字典中仅选择几个键? - mrlucasrib

1

大家好,我觉得我也应该分享一下这个。

上面的答案对我来说在使用 ASP.NET 中的文本框时有效。

var jsonData = JsonConvert.DeserializeObject<Dictionary<string, string>>
(json_Incoming_fromServer);
foreach(var keyvalue in jsonData)
{

   textBox.text = keyvalue.Value; // this will only display the value of that
   // attribute / key 

}

感谢EZI。

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