C# 使用JSON.Net解析JSON数组

C# 使用JSON.Net解析JSON数组,c#,json,json.net,C#,Json,Json.net,我有一个json,看起来像这样: "events": { "Arsenal_West Ham United": { "sport": "EPL", "sport_display": "EPL", "participants": [ "Arsenal", "West Ham United" ], "home_team": "Arsenal", "commence": "1524400200", "status":

我有一个json,看起来像这样:

"events": {
  "Arsenal_West Ham United": {
    "sport": "EPL",
    "sport_display": "EPL",
    "participants": [
      "Arsenal",
      "West Ham United"
    ],
    "home_team": "Arsenal",
    "commence": "1524400200",
    "status": "Pending",
    "sites": {
      "williamhill": {
        "odds": {
          "h2h": [
            "1.50",
            "6.50",
            "4.50"
          ]
        },
        "last_update": 1524385803
      }
    }
  }
 }
虽然我已经设法阅读了所提供的大部分数据,但我已经厌倦了使用以下方法从“站点”读取数据

var sites = match.Value["sites"];

                foreach(var site in sites)
                {
                    Console.WriteLine(site);
                    Console.ReadKey();
                }
但这又回来了

"williamhill": {
        "odds": {
          "h2h": [
            "1.50",
            "6.50",
            "4.50"
          ]
        },
        "last_update": 1524385803
      }
我想单独阅读站点中的每个项目,这意味着,例如,我想将“williamhill”存储在一个字符串中,并单独获得每个赌注。

站点给了您一个结果,因为它有一个williamhill类型的结果

威廉姆希尔还将给你一个类型赔率的结果(你明白了)

如果从类的角度来看json,您会看到类似的情况

public class Odds
{
    public List<string> h2h { get; set; }
}

public class Williamhill
{
    public Odds odds { get; set; }
    public int last_update { get; set; }
}

public class Sites
{
    public Williamhill williamhill { get; set; }
}
//here the root object is the sites but ofcourse the real root object is events
public class RootObject
{
    public Sites sites { get; set; }
}

string json = // yourJson
JObject obj = JObject.Parse(json);

var h2h = obj["events"]["Arsenal_West Ham United"]["sites"]["williamhill"]["odds"]["h2h"];
foreach (var item in h2h)
{
   Debug.WriteLine(item);
}
输出

威廉希尔


请你进一步解释一下,你打算如何在你的C代码中对结果进行分组?你试过使用吗?我将根据数据的值查看数据库中的数据。例如,赔率将根据下注方向保存在db中,“上次更新”中的数据将被存储以检查数据上次更新的时间,等等JSON的
站点
属性不是数组,更像是一个
字典。你真的应该尝试将你的JSON反序列化为强类型对象,这就是JSON.NET的用途。@FedericoDipuma到目前为止,我已经能够阅读所有内容,只是我遇到问题的网站:/有没有办法动态访问博彩公司名称而不是硬编码它?因为我有不止一个公司名称
  JToken sites = obj["events"]["Arsenal_West Ham United"]["sites"];

  foreach (JProperty content in sites)
  {
      Debug.WriteLine(content.Name);

   }