Newtonsoft转义JSON字符串无法反转换为对象 [英] Newtonsoft escaped JSON string unable to deseralize to an object

查看:57
本文介绍了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字符串无法反转换为对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆