在 Blazor Web 应用程序下检索指定 JSON 文本文件的 header 下的数据

Retrieve the data under the header of a specified JSON text file under Blazor web application

GetFromJsonAsync 方法可用于将数据从 JSON 文本文件读取到 Blazor Web 应用程序中的变量中。该方法适用于简单的 JSON 文件。

GetFromJsonAsync 方法示例:

@code {
    private Students[]? students;

    protected override async Task OnInitializedAsync()
    {
        students = await Http.GetFromJsonAsync<Students[]>("school.json");
    }

    public class Students
    {
        public int id { get; set; }
        
        public string? name { get; set; }
        
        public string? lastname { get; set; }

    }
}

我的问题是,如何只读取给定 JSON header 中的数据?

示例:

{
   "book":[
      {
         "id":"444",
         "language":"C",
         "edition":"First",
         "author":"Dennis Ritchie "
      },
      {
         "id":"555",
         "language":"C++",
         "edition":"second",
         "author":" Bjarne Stroustrup "
      }
   ]
  "student": [ 
     { 
        "id":"01", 
        "name": "Tom", 
        "lastname": "Price" 
     }, 
    
     { 
        "id":"02", 
        "name": "Nick", 
        "lastname": "Thameson" 
     } 
  ]     
}

我只想将“student”下的数据JSON header读入一个students变量。


更新:根据永顺的回复,如果只需要“student”JSONheader里面的数据,可能就够了只创建 Student 和 Root 类:

@code {
    private Student[]? students;

    protected override async Task OnInitializedAsync()
    {   
        Root? root = await Http.GetFromJsonAsync<Root>("school.json");
        students = root.Student.ToArray();
    }

    public class Student
    {
        [JsonPropertyName("id")]
        public string? Id { get; set; }

        [JsonPropertyName("name")]
        public string? Name { get; set; }

        [JsonPropertyName("lastname")]
        public string? Lastname { get; set; }
    }

    public class Root
    {
        [JsonPropertyName("student")]
        public List<Student>? Student { get; set; }
    }
}

您需要 Root class。并建议将 属性 名称命名为 Pascal 大小写并使用 JsonPropertyName 属性

public class Book
{
    [JsonPropertyName("id")]
    public string Id { get; set; }

    [JsonPropertyName("language")]
    public string Language { get; set; }

    [JsonPropertyName("edition")]
    public string Edition { get; set; }

    [JsonPropertyName("author")]
    public string Author { get; set; }
}

public class Student
{
    [JsonPropertyName("id")]
    public string Id { get; set; }

    [JsonPropertyName("name")]
    public string Name { get; set; }

    [JsonPropertyName("lastname")]
    public string Lastname { get; set; }
}

public class Root
{
    [JsonPropertyName("book")]
    public List<Book> Book { get; set; }

    [JsonPropertyName("student")]
    public List<Student> Student { get; set; }
}

将 JSON 反序列化为 Root 对象。

protected override async Task OnInitializedAsync()
{
   Root root = await Http.GetFromJsonAsync<Root>("school.json");
   students = root.Students;
}