【发布时间】:2019-02-05 07:20:39
【问题描述】:
问题背景:
我正在通过 HttpResponseMessage 接收 JSON 响应,如图所示:
var jsonString= response.Content.ReadAsStringAsync().Result;
这给了我以下简单的转义 JSON 字符串结果:
"\"{\\\"A\\\":\\\"B\\\"}\""
问题:
我正在使用 Newtonsoft 尝试将其反序列化为模型:
SimpleModel simpleModel= JsonConvert.DeserializeObject<SimpleModel>(jsonString);
SimpleModel的Class模型:
public class SimpleModel
{
public string A { set; get; }
}
转换给我以下错误:
An exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll but was not handled in user code
Additional information: Error converting value "{"A":"B"}" to type 'PyeWebClient.Tests.ModelConversionTests+SimpleModel'. Path '', line 1, position 15.
我从任务结果返回的 JSON 是有效的,所以我不明白是什么问题导致了转换错误,格式化 JSON 字符串的正确方法是什么,以便可以将其转换为 C#型号类型?
【问题讨论】:
-
是否存在内部异常,可能会提供更多详细信息?
-
因此,如果您的序列化 JSON 再次被序列化,您也可以反序列化两次:
JsonConvert.DeserializeObject<SimpleModel>(JsonConvert.DeserializeObject<string>("\"{\\\"A\\\":\\\"B\\\"}\""))。当然一开始最好避免序列化两次。 -
您的源字符串中有多余的引号,它们不是有效的 json。有效的 json 将是 {"A":"B"},没有双引号包裹它。在反序列化之前删除多余的引号,或者仔细检查@ckuri 提到的序列化步骤
标签: c# json json.net deserialization json-deserialization