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

如何在c#中使用restsharper存储每个JSON数据?,c#,restsharp,C#,Restsharp,我需要从JSON响应中获取值,我已经尝试执行以下操作,但是项目类中的messagebox显示为空 我曾尝试用谷歌搜索我的问题(也包括restsharp教程),但直到现在我还无法解决我遇到的问题。我在网上到处都能找到线索,这就是我在过去几天里取得的进展 我期望的结果是API中的每个值都进入变量,然后我可以获取每个值。我不想要简单的JSON内容 Api类 private async void Submit_Button_Click(object sender, RoutedEventArgs e)

我需要从JSON响应中获取值,我已经尝试执行以下操作,但是
项目
类中的messagebox显示为空

我曾尝试用谷歌搜索我的问题(也包括restsharp教程),但直到现在我还无法解决我遇到的问题。我在网上到处都能找到线索,这就是我在过去几天里取得的进展

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

Api类

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 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链接:

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

class ProjectList
{
    public Project[] Projects { get; set; }
}
然后反序列化您对新
ProjectList
类的响应:

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

似乎您正在将具有一个属性的对象反序列化为
Project
类对象,该属性包含
Project
对象数组。您的JSON示例显示了根对象的属性
projects
包含一个对象数组,因此您希望在类设计中匹配该属性,以便反序列化隐式工作:

class ProjectList
{
    public Project[] Projects { get; set; }
}
然后反序列化您对新
ProjectList
类的响应:

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

假设您有这样一个类:

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();
}
public class ProjectsModel
{
    public List<Project> Projects { get; set; }
}

假设您有这样一个类:

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();
}
public class ProjectsModel
{
    public List<Project> Projects { get; set; }
}

你不应该做
output.check()
而不是
project.check()
project=newproject()
是一个空的新实例。您不应该执行
输出。检查()
而不是
项目。检查()
项目=新项目()
是一个空的新实例。您好,谢谢您的回复。因此,如果我理解正确,我必须首先定义
ProjectList
,因为这是我的JSON结构。然后为我的项目类创建一个数组实例,以便能够逐个获取所有数据?我对这个很陌生,比如说,我怎样才能抓住第一个项目?再次感谢您的回复。(重新发布更新)没错,你可以像我在上面的回答中那样定义
ProjectList
类,那么你不需要做任何额外的工作来反序列化或映射字段。无需创建项目对象数组,因为在上例中,
output.Projects
属性中已经存在该数组。然后,您可以遍历这些项目以找到所需的数据,例如,如果阵列中只有一个项目,或者只想访问第一个项目,则可以这样访问它:
project p1=output.projects[0]
扩展了示例以包括对
提交按钮\u单击
方法的更改。@n212:我不知道
项目应该做什么。get
代码应该做什么,您是否在GitHub上或任何地方有更大的代码库以获得更好的上下文?是否使用
firstProjectnResponse.check()执行上面的示例代码为您工作?我不认为您在
项目
类对象(
firstProjectInResponse
)上调用的
.ToString()
方法将获得您要查找的数据。您必须像这样单独引用每个属性:
tb.Text=firstprojectnResponse.Description
将文本框文本值设置为项目对象的
说明
属性值。您需要分别引用每个属性以获取其值。您好,谢谢您的回复。因此,如果我理解正确,我必须首先定义
ProjectList
,因为这是我的JSON结构。然后为我的项目类创建一个数组实例,以便能够逐个获取所有数据?我对这个很陌生,比如说,我怎样才能抓住第一个项目?再次感谢您的回复。(重新发布更新)没错,你可以像我在上面的回答中那样定义
ProjectList
类,那么你不需要做任何额外的工作来反序列化或映射字段。无需创建项目对象数组,因为在上例中,
output.Projects
属性中已经存在该数组。然后,您可以遍历这些项目以找到所需的数据,例如,如果阵列中只有一个项目,或者只想访问第一个项目,则可以这样访问它:
project p1=output.projects[0]
扩展了示例以包括对
提交按钮\u单击
方法的更改。@n212:我不知道
项目应该做什么。get
代码应该做什么,您是否在GitHub上或任何地方有更大的代码库以获得更好的上下文?是否使用
firstProjectnResponse.check()执行上面的示例代码为您工作?我不认为您在
项目
类对象(
firstProjectInResponse
)上调用的
.ToString()
方法将获得您要查找的数据。您必须像这样单独引用每个属性:
tb.Text=firstprojectnResponse.Description
将文本框文本值设置为项目对象的
说明
属性值。您需要单独引用每个属性以获取其值。