Получаю при десериализации JsonException: The JSON value could not be converted to ambity.Models.AllModel
Хочу написать хелпер, возвращающий объект модели AllModel с данными из get-запроса, которые сериализуются и записываются в файл, а затем файл считывается и десиарелизуются в модель. Пока пробовал просто вернуть строку, но столкнулся с исключением
Хелпер:
public string GetApiResponse()
{
HttpClient client = new HttpClient();
HttpClientHandler handler = new HttpClientHandler
{
AutomaticDecompression = DecompressionMethods.All
};
HttpResponseMessage response = client.GetAsync("https://hackathon.ambity.ru/api/contact/").Result;
var options = new JsonSerializerOptions();
options.WriteIndented = true;
string jsonString = JsonSerializer.Serialize(response.Content.ReadAsStringAsync().Result, options);
File.WriteAllText("data.json", jsonString);
var jsonAllModel = File.ReadAllText("data.json");
var allmodel = JsonSerializer.Deserialize<AllModel>(jsonAllModel);
//string responseBody = response.Content.ReadAsStringAsync();
//var result = JsonSerializer.Deserialize<AllModel>(response);
return allmodel.client_phone.ToString();
}
Json Файл
"{\u0022status\u0022:\u0022ok\u0022,\u0022call_date\u0022:\u00222023-11-25 05:55:59\u0022,\u0022operator_fio\u0022:\u0022\\u0421\\u0432\\u0435\\u0448\\u043d\\u0438\\u043a\\u043e\\u0432\\u0430 \\u0410\\u043b\\u0451\\u043d\\u0430 \\u041a\\u043e\\u043d\\u0441\\u0442\\u0430\\u043d\\u0442\\u0438\\u043d\\u043e\\u0432\\u043d\\u0430\u0022,\u0022client_phone\u0022:\u00227 (461) 693-93-71\u0022,\u0022contact_audio\u0022:\u0022http:\\/\\/hackathon.ambity.ru\\/hackathon\\/public\\/audio\\/zapis140.mp3\u0022}"
Ответы (1 шт):
Автор решения: Alexander Petrov
→ Ссылка
Я откровенно не понимаю, что вы наворотили.
Хотите вернуть AllModel, но возвращаете string.
Зачем-то сериализуете полученное значение, хотя оно уже является JSON.
Зачем сохранять в файл и тут же из него читать?
Модель:
public class AllModel
{
[JsonPropertyName("status")]
public string Status { get; set; }
[JsonPropertyName("call_date")]
public string CallDate { get; set; }
[JsonPropertyName("operator_fio")]
public string OperatorFio { get; set; }
[JsonPropertyName("client_phone")]
public string ClientPhone { get; set; }
[JsonPropertyName("contact_audio")]
public string ContactAudio { get; set; }
}
Метод:
public async Task<AllModel> GetApiResponseAsync()
{
string json = await client.GetStringAsync("https://hackathon.ambity.ru/api/contact/");
var model = JsonSerializer.Deserialize<AllModel>(json);
return model;
}
HttpClient является полем класса. Он должен быть создан один раз и использоваться многократно.
Вызов метода:
var model = await GetApiResponseAsync();
Console.WriteLine(model.Status);
Console.WriteLine(model.CallDate);
Console.WriteLine(model.OperatorFio);
Console.WriteLine(model.ClientPhone);
Console.WriteLine(model.ContactAudio);
Используемые пространства имён:
using System.Text.Json;
using System.Text.Json.Serialization;