Получаю при десериализации 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;
→ Ссылка