-1

尝试反序列化 json 对象时出现以下异常:

JsonSerializationException:转换值“[{“ID”:“1111”,“FirstName”:“。”,“LastName”:“test”,“AdditionalName”:“”,“ID_PassportNum”:“NONE”,“DateOfBirth”时出错:""}] 输入 'System.Collections.Generic.List`1[MoblieCP.Models.UserInfo]'。路径 '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 次反序列化。

4

1 回答 1

3

似乎当数据被序列化时,首先被序列List<UserInfo>化,然后它被添加到整个对象中。这就是为什么你必须反序列化它 2 次。

于 2019-10-13T05:02:54.627 回答