Невозможно десериализовать массив json в объект с помощью restsharp

#c# #json #restsharp

#c# #json #restsharp

Вопрос:

вот мой ответ JSON:

      [
{
    "Id": 25,
    "CreateDate": "2020-09-26T12:25:27.917",
    "Title": "Second TV Repair",
    "categoryTitle": "Tv Repair",
    "FirstName": "Sample FirsName",
    "LastName": "Sample LastName"
} ]
  

вот мой класс десериализатора:

     public class ServicemanHistory
{
    public int Id { get; set; }
    public DateTime CreateDate { get; set; }
    public string Title { get; set; }
    public string categoryTitle { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
  

Вот мой метод запроса restsharp:

     public static async Task<List<ServicemanHistory>> getServiceManHistory()
    {
        string url = "https://myapi.net";
        string token = Settings.token;
        var client = new RestClient(url);
        var request = new RestRequest(Method.GET);
        request.AddHeader("Authorization", "Bearer "   token);
        var response = await client.ExecuteAsync<List<ServicemanHistory>>(request);
        Console.WriteLine("**** response is:"   response.Content); 
        if(response.IsSuccessful)
        {
            Console.WriteLine("SUCCESS!!!");
            return response.Data; 
        } else
        {
            return null; 
        }
    }
  

Я получаю сообщение об успехе, напечатанное в моей консоли, и я получаю json, возвращенный из ответа.Содержимое, но ответ.Данные всегда равны нулю. Я сделал то же самое, используя NewtonSoft, и это не исправило ситуацию. И я попытался использовать оболочку для массива JSON внутри моего класса десериализатора и тоже не сработал.

Моя попытка с помощью NewtonSoft:

     public static async Task<List<ServicemanHistory>> getServiceManHistory()
    {
        string url = "https://myapi.net";
        string token = Settings.token;
        var client = new RestClient(url);
        var request = new RestRequest(Method.GET);
        request.AddHeader("Authorization", "Bearer "   token);
        var response = await client.ExecuteAsync(request);
        Console.WriteLine("**** response is:"   response.Content);
        var result = JsonConvert.DeserializeObject<List<ServicemanHistory>>(response.Content); 
        if(response.IsSuccessful)
        {
            Console.WriteLine("SUCCESS!!!");
            return resu< 
        } else
        {
            return null; 
        }
    }
  

При попытке десериализации с помощью NewtonSoft я получаю следующую ошибку:

Newtonsoft.Json.Сообщение JsonSerializationException=Не удается десериализовать текущий объект JSON (например, {«name»:»value»}) в тип ‘System .Коллекции.Общий.Список o исправьте эту ошибку либо измените JSON на массив JSON (например, [1,2,3] ), либо измените десериализованный тип, чтобы он был обычным .ЧИСТЫЙ тип (например, не примитивный тип, такой как integer, а не тип коллекции, такой как array или List), который может быть десериализован из объекта JSON. Атрибут JsonObjectAttribute также может быть добавлен к типу, чтобы заставить его десериализоваться из объекта JSON.

Комментарии:

1. Не могли бы вы показать нам, что вы пытались сделать с NewtonSoft?

2. отредактировал мой ответ и добавил бит NewtonSoft.

3. Ошибка явно указывает на обратное.

4. Если это на самом деле массив, вы должны получить аналогичную, но другую ошибку. Возможно ли, что конечная точка может возвращать как отдельный элемент, так и массив на основе некоторых условий?

5. Если ответ будет таким, то Newtonsoft не выйдет из строя — демонстрация: dotnetfiddle.net/7HM0kD . Что-то в том, о чем вы сообщаете, не имеет смысла.