Десериализация возврата нуля, даже если ответ 200 - PullRequest
0 голосов
/ 02 апреля 2020

Я проверил ответ, он возвращает мне нужную мне информацию (которая не равна нулю) и дает мне ответ 200. Всякий раз, когда я пытаюсь десериализовать возвращенный JSON, он показывает ноль, даже если должен быть предоставленной информацией.

Это происходит только тогда, когда я пытаюсь получить один проект, когда я получаю несколько, все это работает. Я пытался удалить класс ProjectList и пытался получить информацию непосредственно из класса Project, но это также ничего не возвращает.

var client = new RestClient("website goes here");

var request = new RestRequest($"/api/v2/projects/{Global.PSlug}");
request.Method = Method.GET;
request.AddHeader("Accept", "application/json");

client.AddDefaultHeader("Authorization", string.Format("Bearer {0}", Global.ApiToken));

var response = client.Execute(request);

var deserialize = new JsonDeserializer();

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

HttpStatusCode statusCode = response.StatusCode;
int numericStatusCode = (int)statusCode;

if (numericStatusCode == 200)
{
    MessageBox.Show(response.Content.ToString()); // gives info
    output.Projects[0].Title = Global.PTitle;
    output.Projects[0].Title = Global.PDescription;

    ProjectTitle.Text = Global.PTitle;
    ProjectDesc.Text = Global.PDescription;
}

Классы для десериализации

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

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 string User_Id { get; set; }
    public string Created_At { get; set; }
    public string Updated_At { get; set; }
}

Ответ:

{
    "Message": "OK",
    "Project": {
        "id": 13,
        "title": "Api",
        "slug": "apitest",
        "description": "Api",
        "deadline": "2020-03-01 00:00:00",
        "user_id": 1,
        "created_at": "2020-02-28 14:53:27",
        "updated_at": "2020-02-28 14:53:27"
    }
}

1 Ответ

2 голосов
/ 02 апреля 2020

Это потому, что JSON, который вы получаете, и класс, который вы используете для десериализации, отличаются. Для JSON потребуется что-то вроде ниже.

class ApiResponse
{
    public string Message { get; set; }
    public Project Project { get; set; }
}

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 string User_Id { get; set; }
    public string Created_At { get; set; }
    public string Updated_At { get; set; }
}
...