Newtonsoft escaped JSON string unable to deseralize to an object(Newtonsoft转义JSON字符串无法反转换为对象)
问题描述
问题背景:
我正在通过HttpResponseMessage接收JSON响应,如下所示:
var jsonString= response.Content.ReadAsStringAsync().Result;
这将给出以下简单的转义JSON字符串结果:
""{\"A\":\"B\"}""
问题:
我正在使用Newtonsoft尝试将其反序列化为模型:
SimpleModel simpleModel= JsonConvert.DeserializeObject<SimpleModel>(jsonString);
SimpleModel
的类模型:
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出现了serialize
两次。
1)所以您必须先反序列化为字符串,然后再反序列化为您的SimpleModel
Like
string json = ""{\"A\":\"B\"}"";
string firstDeserialize = JsonConvert.DeserializeObject<string>(json);
SimpleModel simpleModel = JsonConvert.DeserializeObject<SimpleModel>(firstDeserialize);
输出:
2)如果不想反序列化两次,则将json解析为JToken
,然后再次解析为JObject
Like
string json = ""{\"A\":\"B\"}"";
JToken jToken = JToken.Parse(json);
JObject jObject = JObject.Parse((string)jToken);
SimpleModel simpleModel = jObject.ToObject<SimpleModel>();
输出:
问题:如何序列化两次?
答案:当您从HttpResponseMessage
返回结果时,您已成功序列化结果,并且在从ReadAsStringAsync
读取此结果后,此方法再次序列化已序列化的结果。
这篇关于Newtonsoft转义JSON字符串无法反转换为对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Newtonsoft转义JSON字符串无法反转换为对象
基础教程推荐
- 将 XML 转换为通用列表 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01