从带有条件的json获取值并将其转换为对象列表

时间:2019-04-10 07:27:11

标签: c# json

使用下面的代码,我可以得到以下值:

<title>@yield('title')</title>
...
<h1>@yield('title')</h1>

我需要的是能够通过json文件选择某个值,然后获取其子级。发送“ 101”的示例应该可以得到:

{
  "101": [
    {
      "name": "Lane 2",
      "code": 21
    },
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 8",
      "code": 81
    },
    {
      "name": "Lane 9",
      "code": 91
    },
    {
      "name": "Lane 11",
      "code": 111
    }
  ],
  "103": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 6",
      "code": 61
    }
  ],
  "105": [
     {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 9",
      "code": 91
    }
  ],
  "107": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 5",
      "code": 51
    }
  ],
  "109": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 5",
      "code": 61
    }
  ],
  "111": [
     {
      "name": "Lane 2",
      "code": 21
    },
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    }
  ],
  "113": [
     {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 8",
      "code": 81
    },
    {
      "name": "Lane 9",
      "code": 91
    }
  ],
  "115": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 5",
      "code": 51
    }
  ],
  "117": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    }
  ]
}

并将其放在课程上。到目前为止,这是我的代码:

Lane.json

    {
      "name": "Lane 2",
      "code": 21
    },
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 8",
      "code": 81
    },
    {
      "name": "Lane 9",
      "code": 91
    },
    {
      "name": "Lane 11",
      "code": 111
    }

Lane.cs

{
  "101": [
    {
      "name": "Lane 2",
      "code": 21
    }
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 8",
      "code": 81
    },
    {
      "name": "Lane 9",
      "code": 91
    },
    {
      "name": "Lane 11",
      "code": 111
    }
  ],
  "103": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 6",
      "code": 61
    }
  ],
  "105": [
     {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 9",
      "code": 91
    }
  ],
  "107": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 5",
      "code": 51
    }
  ],
  "109": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 5",
      "code": 61
    }
  ],
  "111": [
     {
      "name": "Lane 2",
      "code": 21
    },
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    }
  ],
  "113": [
     {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 8",
      "code": 81
    },
    {
      "name": "Lane 9",
      "code": 91
    }
  ],
  "115": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 5",
      "code": 51
    }
  ],
  "117": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    }
  ]
}

这就是我获取值的方式

class Lane
{
    public string name { get; set; }
    public int code { get; set; }
}

class LaneContainer
{
    public List<Lane> Lane { get; set; }
}

我收到这样的错误:

  

其他信息:解析值后,出现意外字符   遇到了:{。路径“ 101 [0]”,第7行,位置4。

您能帮我吗?谢谢。

2 个答案:

答案 0 :(得分:2)

您缺少逗号,并且您的结构是Dictionary<string,List<Lane>>

  class Lane
  {
     public string name { get; set; }
     public int code { get; set; }
  }

示例

获得101

var json = File.ReadAllText(path);

var lanes = JsonConvert.DeserializeObject<Dictionary<string, List<Lane>>>(json);
var results = lanes["101"];

答案 1 :(得分:1)

您可以像下面那样反序列化为Dictionary<int, Node[]>并获取所需的特定密钥

Dictionary<int, Node[]> myDict = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<int, Node[]>>(json);
var data = myDict[100];

Node

public class Node
{
    public int Code { get; set; }
    public string Name { get; set; }
}