如何在 c# 中使用 restsharper 存储每个 JSON 数据?

How to store each JSON data with restsharper in c#?

我需要从 JSON 响应中获取值,我已尝试执行以下操作,但消息框在 Project class.[=16= 中显示为空]

我已经尝试 Google 我的问题(还有 restsharp 教程),但直到现在我都无法解决我遇到的问题。我在网上到处都得到了线索,这就是我在过去几天里得到的信息。

我期望的结果是 API 中的每个值都进入变量,然后我可以获取每个值。我不想要普通的 JSON 内容。

Api Class

private async void Submit_Button_Click(object sender, RoutedEventArgs e)
{
    var client = new RestClient("http://apage.com/");
    var request = new RestRequest("api/project");
    request.Method = Method.GET;

    request.AddHeader("Accept", "application/json");

    client.AddDefaultHeader("Authorization",
        string.Format("Bearer {0}", "token goes here"));

    var response = client.Execute(request);

    var deserialize = new JsonDeserializer();
    Project output = deserialize.Deserialize<Project>(response);

    Project project = new Project();
    project.check();
}

项目Class

class Project
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Slug { get; set; }
    public string Description { get; set; }
    public string Deadline { get; set; }
    public int User_id { get; set; }
    public string Created_at { get; set; }
    public string Updated_at { get; set; }

    public void check()
    {
        MessageBox.Show(Title);
    }
}

JSON代码

{
    "projects": [
        {
            "id": 29,
            "title": "a_project",
            "slug": "a_project",
            "description": "f",
            "deadline": "2020-04-08 00:00:00",
            "user_id": 19,
            "created_at": "2020-02-11 16:59:45",
            "updated_at": "2020-02-11 16:59:45"
        }
    ]
}

Github link: https://github.com/s1129092/n212/blob/master/WpfApp1/MainWindow.xaml.cs

您似乎正在将一个包含 Project 对象数组的 属性 对象反序列化为 Project class 对象。您的 JSON 示例显示根对象的 属性 projects 包含一个对象数组,因此您需要在 class 设计中匹配它以使反序列化隐式工作:

class ProjectList
{
    public Project[] Projects { get; set; }
}

然后将你的响应反序列化为新的 ProjectList class:

ProjectList output = deserialize.Deserialize<ProjectList>(response);

然后您可以遍历 output.Projects 数组以找到您的项目对象。

您的 Submit_Button_Click 方法现在可以像这样工作:

private async void Submit_Button_Click(object sender, RoutedEventArgs e)
{
    var client = new RestClient("http://apage.com/");
    var request = new RestRequest("api/project");
    request.Method = Method.GET;

    request.AddHeader("Accept", "application/json");

    client.AddDefaultHeader("Authorization",
        string.Format("Bearer {0}", "token goes here"));

    var response = client.Execute(request);

    var deserialize = new JsonDeserializer();

    ProjectList output = deserialize.Deserialize<ProjectList>(response);

    Project firstProjectInResponse = output.Projects[0];
    firstProjectInResponse.check();
}

假设你有这样的class:

public class ProjectsModel
{
    public List<Project> Projects { get; set; }
}

您可以使用以下代码获取响应数据:

var response = client.Execute<ProjectsModel>(request).Data;
var projects = response.Projects;

然后例如:

foreach(Project p in projects)
{
    MessageBox.Show(p.Title);
}