【问题标题】:JsonConvert fails to Deserialize part of an objectJsonConvert 无法反序列化对象的一部分
【发布时间】: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&lt;UserInfo&gt; 时,我成功了。 但我不想每次都进行 2 次反序列化。

【问题讨论】:

  • 能否请您显示UserInfo 类?
  • 您的问题是 Data 是嵌入的双序列化 JSON。 IE。在服务器端,有人将Data 的值序列化为 JSON 字符串,将其作为字符串值嵌入到外部响应对象中,然后将响应对象本身序列化为 JSON。为了解决这个问题,您可以将EmbeddedLiteralConverter&lt;List&lt;UserInfo&gt;&gt;this answer 应用到How do I convert an escaped JSON string within a JSON object?。事实上,这似乎是重复的,同意吗?

标签: c# json xamarin.forms jsonconvert


【解决方案1】:

好像是数据序列化的时候,先是List&lt;UserInfo&gt;序列化,然后加到整个对象上。这就是为什么你必须反序列化 2 次。

【讨论】:

  • 非常感谢!我检查了后端代码,确实 Data 被序列化,然后添加到结果对象中再次序列化。
猜你喜欢
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多