#c# #asp.net-core #asp.net-core-3.1
#c# #asp.net-core #asp.net-core-3.1
Вопрос:
Привет написал небольшое веб-приложение, которое подключается к API.
Он подключается к API и возвращает данные, как вы можете видеть здесь:
astroTechItem= await Http.GetFromJsonAsync<AstroTechItem[]>("api/AstroTechItem/34");
И он возвращает следующий JSON:
{
"objectId": 34,
"scopeId": 3,
"title": "solar telescope",
"completed": false
}
В моем приложении у меня есть эта модель:
private class AstroTechItem
{
public long Id { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
}
И я десериализуюсь следующим образом:
JsonSerializer serializer = new JsonSerializer();
try
{
return serializer.Deserialize<AstroTechItem>(jsonReader);
}
catch(JsonReaderException)
{
Console.WriteLine("Invalid JSON.");
}
}
else
{
Console.WriteLine("HTTP Response was invalid and cannot be deserialised.");
}
Но моя модель не соответствует тому, что возвращает API.
Моя консоль продолжает показывать: Invalid JSON.
Нужно ли мне связаться с создателем API и попросить его изменить его?
Или есть способ вставить этот JSON в мою модель?
Я не могу понять это.
Спасибо!
Комментарии:
1. Какую библиотеку сериализации JSON вы используете? Должны быть атрибуты аннотаций членов, позволяющие определять имена свойств json. Например, для Newtonsoft json.net есть
[JsonProperty("json_name")]
, ибоText.Serialization.Json
есть[JsonPropertyName("json_name"])
Ответ №1:
Чтобы десериализовать json в модель, свойства модели должны соответствовать свойствам json. Или вы можете аннотировать модель именами свойств json. В вашем случае ни одно из свойств не совпадает.
Проще всего обновить модель, чтобы согласовать ее с внешним API следующим образом:
private class AstroTechItem
{
public long ObjectId { get; set; }
public long ScopeId { get; set; }
public string Title { get; set; }
public bool Completed { get; set; }
}
В противном случае вы можете аннотировать модель:
private class AstroTechItem
{
[JsonProperty("objectId")]
public long Id { get; set; }
[JsonProperty("title")]
public string Name { get; set; }
[JsonProperty("isComplete")]
public bool Completed { get; set; }
}