本文介绍了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字符串无法反转换为对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!