JsonConvert не может десериализовать часть объекта - PullRequest
0 голосов
/ 13 октября 2019

Я получаю следующее исключение при попытке десериализации объекта json:

JsonSerializationException: Ошибка при преобразовании значения "[{" ID ":" 1111 "," FirstName ":". ","LastName": "test", "AdditionalName": "", "ID_PassportNum": "NONE", "DateOfBirth": ""}] для ввода 'System.Collections.Generic.List`1 [MoblieCP.Models.UserInfo]'. Path' Data ', строка 1, позиция 1303

Я получаю ответы от сервера в следующем формате:

{
"CodeError":0,
"Data":"[{\"ID\":\"1111\",\"FirstName\":\".\",\"LastName\":\"test\",\"AdditionalName\":\"\",\"ID_PassportNum\":\"NONE\",\"DateOfBirth\":\"\"}]",
"ErrorMessage":null
}

часть данных всегда представляет собой список, даже если у него есть один элемент.

Я создал универсальный класс, который содержит ответы сервера:

public class GenericResponse<T>
{
    [JsonProperty("CodeError")]
    public ResponseCodes CodeError { get; set; }

    [JsonProperty("Data")]
    public T Data { get; set; }

    [JsonProperty("ErrorMessage")]
    public string ErrorMessage { get; set; }
}

Это часть, где я пытаюсь десериализовать:

jsonResult = await responseMessage.Content.ReadAsStringAsync().ConfigureAwait(false);
var json = JsonConvert.DeserializeObject<GenericResponse<List<UserInfo>>(jsonResult);

Каждый раз, когда JsonConverter возвращает это исключение.

Когда я пытаюсь десериализовать «данные» самостоятельно (не как часть объекта GenericResponse) в List<UserInfo>, у меня получается. Но я не хочунужно делать 2 десериализации каждый раз.

1 Ответ

3 голосов
/ 13 октября 2019

Кажется, когда данные были сериализованы, сначала List<UserInfo> сериализованы, затем они добавляются ко всему объекту. Вот почему вы должны десериализовать его 2 раза.

...