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)所以您必须先反序列化为字符串,然后再反序列化为您的SimpleModelLike
string json = ""{\"A\":\"B\"}"";
string firstDeserialize = JsonConvert.DeserializeObject<string>(json);
SimpleModel simpleModel = JsonConvert.DeserializeObject<SimpleModel>(firstDeserialize);
输出:
2)如果不想反序列化两次,则将json解析为JToken,然后再次解析为JObjectLike
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字符串无法反转换为对象
基础教程推荐
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
- C# 从 List<List<int>> 中删除重 2022-01-01
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
- Moq It.Is<>不匹配 2022-01-01
- .NET SerialPort DataReceived 事件未触发 2022-01-01
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
- WPF 模态进度窗口 2022-01-01
