代码之家  ›  专栏  ›  技术社区  ›  aliceangel

如何读取包含C#数组的json文件并对其执行LINQ查询?[副本]

  •  3
  • aliceangel  · 技术社区  · 7 年前

    我是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"
                     ]
       }
    ]
    

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

    请推荐我。提前谢谢你。

    2 回复  |  直到 7 年前
        1
  •  5
  •   Alex    7 年前

    定义模型:

    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; }
    }
    

    Read deserialize JSON:

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

    执行LINQ query :

    var peopleOverForty = from p in people
                          where p.age > 40
                          select p;
    
        2
  •  1
  •   Vulpex    7 年前

    我建议至少在可能的情况下,为您试图读取的对象创建一个类。

    然后将JSON字符串反序列化为 List<T> 在这里,您可以使用Modelclass。

    List<YourObject> deserializedObject = JsonConvert.DeserializeObject<YourObject>(jsonString);
    

    使用此列表,您可以轻松执行LINQ查询,如

    List<YourObject> selectedObjects = deserializedObject.Where(x => x.age > 31);
    

    这将为您提供对象 selectedObjects 仅包含年龄大于等于;31