Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解析json数组json.net_C#_.net_Json.net - Fatal编程技术网

C# 如何解析json数组json.net

C# 如何解析json数组json.net,c#,.net,json.net,C#,.net,Json.net,我知道这听起来很基本,但围绕这个问题的所有答案都是愚蠢的庞大代码,不允许我需要的功能。我需要解析这个json数组 [ { "label":"Cow (1)", "value":3309 }, { "label":"Cow (1)", "value":14998 }, { "label":"Cow (4)", "value":20969 }, { "label":"Cow

我知道这听起来很基本,但围绕这个问题的所有答案都是愚蠢的庞大代码,不允许我需要的功能。我需要解析这个json数组

[
   {
      "label":"Cow (1)",
      "value":3309
   },
   {
      "label":"Cow (1)",
      "value":14998
   },
   {
      "label":"Cow (4)",
      "value":20969
   },
   {
      "label":"Cow (4)",
      "value":20970
   },
   {
      "label":"Cow (4)",
      "value":20971
   },
   {
      "label":"Cowardly Bandit",
      "value":1886
   },
   {
      "label":"Cow calf (1)",
      "value":2310
   },
   {
      "label":"Coward in armour (82)",
      "value":5097
   },
   {
      "label":"Coward with bow (105)",
      "value":6049
   },
   {
      "label":"Cow calf (1)",
      "value":20979
   },
   {
      "label":"Undead cow (4)",
      "value":1691
   },
   {
      "label":"Plague cow",
      "value":1998
   },
   {
      "label":"Plague cow",
      "value":1999
   },
   {
      "label":"Unicow (57)",
      "value":5603
   },
   {
      "label":"Zombie cow (1)",
      "value":18597
   },
   {
      "label":"Zombie cow (1)",
      "value":20928
   },
   {
      "label":"Super Cow (5)",
      "value":21497
   },
   {
      "label":"Dairy cow",
      "value":22418
   },
   {
      "label":"Armoured cow thing (62)",
      "value":5986
   },
   {
      "label":"Armoured cow thing (62)",
      "value":6048
   }
]
当我尝试访问数组中的数据点时,它返回null,代码:

Stream stream = client.OpenRead("http://services.runescape.com/m=itemdb_rs/bestiary/beastSearch.json?term=" + Input);
StreamReader reader = new StreamReader(stream);
jObject = JObject.Parse(reader.ReadToEnd());
stream.Close();
//put items into list view
// i is the number where the json object is in the array 
var lvi = new ListViewItem(new string[] { (string)jObject[i]["label"], (string)jObject[i]["value"] }); 
我不想使用类

请尝试我的答案:

这将需要将
反序列化ListFromJSON()
方法修改为:

public IEnumerable<KeyValuePair<string,string>> DeserializeListFromJson(string jsonArray)
{
    return JsonConverter.DeserializeObject<List<JObject>>(jsonArray).Select( obj => DeserializeFromJson(obj) );
}
public IEnumerable反序列化ListFromJSON(字符串jsonArray)
{
返回JsonConverter.DeserializeObject(jsonArray).Select(obj=>DeserializeFromJson(obj));
}
与您的案例一起使用:

Stream=client.OpenRead(“http://services.runescape.com/m=itemdb_rs/bestiary/beastSearch.json?term=“+输入);
ListViewItem=null;
使用(StreamReader=新StreamReader(stream))
{
KeyValuePair selected=DeserializeListFromJson(reader.ReadToEnd()).ElementAt(i);
item=newlistViewItem(新字符串[]{selected.Key,selected.Value});
}

不想使用类很奇怪,但并非不可能

var json = reader.ReadToEnd();
var objects = JsonConvert.DeserializeObject<dynamic[]>(json);
var lvi = new ListViewItem(new string[] { (string)objects[i].label, (string)objects[i].value }); 
var json=reader.ReadToEnd();
var objects=JsonConvert.DeserializeObject(json);
var lvi=new ListViewItem(新字符串[]{(字符串)对象[i].label,(字符串)对象[i].value});

在代码中发现错误。相反:

JObject.Parse(reader.ReadToEnd());
写入(JObject->JArray):


在两行中写入操作时,您将看到错误在哪里:从流中读取或序列化。

我不想使用类
那么您在选择使用面向对象语言时做出了一个奇怪的决定。将其转换为动态列表并访问所需的详细信息您确定从该Web服务获得了正确的数据吗?在尝试解析之前,可以将
reader.ReadToEnd()
读入一个字符串变量,您可以对其进行检查。谢谢。。避免类的原因是因为类有一定数量的变量,而需要接收的次要json在所述json中有100多个变量。。为此而上课在当时是很可笑的best@Offnix显示的JSON是一个对象数组,每个对象都有相同的
标签
字段。假设您引用的另一个JSON共享相同的模式,您只需要创建一个具有这两个属性的类,并将JSON解析为该类的数组。@Offnix,JSON.Net允许动态—请确保您调用的属性实际存在于JSON中,否则会出现动态运行时错误。否则,只需创建一个具有您想要使用的属性的类,它将只使用这些属性填充该类,而忽略其余的属性
Stream stream = client.OpenRead("http://services.runescape.com/m=itemdb_rs/bestiary/beastSearch.json?term=" + Input);
ListViewItem item = null;
using (StreamReader reader = new StreamReader(stream))
{
    KeyValuePair<string, string> selected = DeserializeListFromJson(reader.ReadToEnd()).ElementAt(i);
    item = new ListViewItem(new string[] { selected.Key, selected.Value });
}
var json = reader.ReadToEnd();
var objects = JsonConvert.DeserializeObject<dynamic[]>(json);
var lvi = new ListViewItem(new string[] { (string)objects[i].label, (string)objects[i].value }); 
JObject.Parse(reader.ReadToEnd());
string text = reader.ReadToEnd();
var jObject = JArray.Parse(text);