如何使用 C# 读取包含数组的 json 文件并对其执行 LINQ 查询?

Sab*_*ina 4 c# linq json.net

我是 C# 中 json 的新手。我使用 newtonsoft.json 我有一个带有数据(数组)的 json 文件:

[ 
    {
         "firstName": "Joyce",
         "lastName": "Huff",
         "isActive": true,
         "age": 59,
         "gender": "female",
         "eyeColor": "green",
         "friends": [
                        "Kendra Buck"
                    ]
   },
   {
        "firstName": "Diann",
        "lastName": "Patrick",
        "isActive": true,
        "age": 45,
        "gender": "female",
        "eyeColor": "blue",
        "friends": [
                      "Roach Mills",
                      "Diaz Pickett"
                   ]
   },
   {
       "firstName": "Holt",
       "lastName": "Erickson",
       "isActive": false,
       "age": 53,
       "gender": "male",
       "eyeColor": "brown",
       "friends": [
                    "Lindsay Wyatt",
                    "Freeman Mcfadden",
                    "Matilda Franklin"
                  ]
  },
  {
      "firstName": "Crystal",
      "lastName": "Santiago",
      "isActive": false,
      "age": 31,
      "gender": "female",
      "eyeColor": "brown",
      "friends": [
                   "Stacy Joseph"
                 ]
   }
]
Run Code Online (Sandbox Code Playgroud)

如何使用 C# 读取包含数组的 json 文件并对其执行 LINQ 查询?我在 JObject 上找到了从文件中读取 json 的示例,但我不知道如何处理 json 数组。阅读 json 数组后,我想运行如下查询: select count(*) from person where age>40;

请建议我。先感谢您。

Ale*_*lex 5

定义模型:

public class Person
{
    public string firstName { get; set; }
    public string lastName { get; set; }
    public bool isActive { get; set; }
    public int age { get; set; }
    public string gender { get; set; }
    public string eyeColor { get; set; }
    public List<string> friends { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

读取反序列化JSON:

string json = System.IO.File.ReadAllText("test.json");
var people = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Person>>(json);
Run Code Online (Sandbox Code Playgroud)

执行 LINQ查询

var peopleOverForty = from p in people
                      where p.age > 40
                      select p;
Run Code Online (Sandbox Code Playgroud)