【发布时间】:2019-10-13 04:36:53
【问题描述】:
尝试反序列化 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 次反序列化。
【问题讨论】:
-
能否请您显示
UserInfo类? -
您的问题是
Data是嵌入的双序列化 JSON。 IE。在服务器端,有人将Data的值序列化为 JSON 字符串,将其作为字符串值嵌入到外部响应对象中,然后将响应对象本身序列化为 JSON。为了解决这个问题,您可以将EmbeddedLiteralConverter<List<UserInfo>>从this answer 应用到How do I convert an escaped JSON string within a JSON object?。事实上,这似乎是重复的,同意吗?
标签: c# json xamarin.forms jsonconvert