首页 > 解决方案 > 如何将给定属性集的相应键和值存储在列表中的 JSON 文件中

问题描述

我有一个要反序列化的 JSON 文件。一般来说,我对 JSON 和反序列化非常陌生,并且发现这非常具有挑战性。我的 JSON 文件结构如下,

{
"SchoolName": "ThisIsTheSchoolName",
  "Student": [
    {
      "Id": "s001",
      "Name": "ABC"
    },
    {
      "Id": "s002",
      "Name": "CDE"
    },
    {
      "Id": "s003",
      "Name": "EFG"
    },
    {
      "Id": "s004",
      "Name": "GHI"
    },
    {
      "Id": "s005",
      "Name": "IJK"
    }
]
}

我要做的是首先将“SchoolName”存储为一个变量(稍后我将在我的应用程序中需要它)。其次,我想遍历 JSON 列表“Student”并将“ Id ”中的每个值存储在 List 中,并将“ Name ”中的每个值存储在另一个 List 中。我无法理解如何做到这一点。这是我迄今为止能够尝试的(哪个)

    string filePath = @"D:\Projects\Student.json";
    string data = File.ReadAllText(filePath);
    Console.Write(data);

    Console.ReadLine();

    dynamic stuList= JsonConvert.DeserializeObject(data);
    foreach (var item in stuList)
    {

        //string Id = item.Id;
        //string Name= item.Version;
    }

非常感谢一些帮助或指导,我可以在这方面取得领先

标签: c#jsonjson.netdeserialization

解决方案


在 Visual Studio 中有一个名为 Paste Special 的选项,我们可以使用它为 json 对象生成 C# 侧有效负载,它将是:

public class Student
{
    public string Id { get; set; }
    public string Name { get; set; }
}

public class StudentsInformation
{
    public string SchoolName { get; set; }
    public List<Student> Student { get; set; }
}

然后可用于反序列化,如:

var studentsInformation = JsonConvert.DeserializeObject<StudentsInformation>(data);

现在可以直接使用 studnets 列表:

var schoolName = studentsInformation.SchoolName;
var students = studentsInformtaion.Student;

推荐阅读