问题背景:
我通过 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
twice.
1)因此,您必须首先反序列化为字符串,然后再次反序列化为您的SimpleModel
like
string json = "\"{\\\"A\\\":\\\"B\\\"}\"";
string firstDeserialize = JsonConvert.DeserializeObject<string>(json);
SimpleModel simpleModel = JsonConvert.DeserializeObject<SimpleModel>(firstDeserialize);
Output:
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>();
Output:
问题:怎么会被序列化两次呢?
Answer:当您返回结果时HttpResponseMessage
您成功序列化了您的结果,并在读取此结果后ReadAsStringAsync
然后这个方法再次序列化已经序列化的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)