成都市住房和城乡建设委员会网站新手运营从哪开始学
解决“无法从 System.String 强制转换或转换为 Class 对象”错误
在进行 API 自动化时,我必须反序列化响应以解析 API 响应数据。我们使用 Newtonsoft.Json NuGet 来实现这一点。
我在反序列化过程中遇到以下错误 -
Newtonsoft.Json.JsonSerializationExceptionHResult=0x80131500消息 = 将值“{“Id”:“92209”,“operatorId”:“100000”,“acctId”:“1000”,“status”:“true}”转换为类型“模型”时出错。路径'',第 1 行,位置 726。来源=Newtonsoft.Json堆栈跟踪:在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader 阅读器、对象值、CultureInfo 文化、JsonContract 契约、Type targetType)在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader 阅读器,类型 objectType,布尔值 checkAdditionalContent)在 Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader,类型 objectType)在 Newtonsoft.Json.JsonConvert.DeserializeObject(字符串值,类型类型,JsonSerializerSettings 设置)在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值,JsonSerializerSettings 设置)在 C:\CommonLibraries\CommonLibrary.cs 中的 CommonLibraries.CommonLibrary.GetResponseBodyDictionary(RestResponse response,Int32 statusCode):第 35 行在 C:\Tests.cs 中的 Test(String id、String TestDescription、Int32 statusCode、String TemplateId) 处:第 108 行内部异常 1:ArgumentException:无法从 System.String 强制转换或转换为 Model。
最初的想法是——
- Json 响应的格式不正确
- 并非所有属性都包含在 Json 中。
但原因并非如此。
经过多次谷歌搜索后,尝试 –
- 修剪 Json 内容
- 替换转义字符
- Html 解码 Json。
这些都不起作用。
最后,这篇 StackOverflow 帖子帮助解决了这个问题。看起来我正在反序列化的内容被序列化了多次,我不得不将其反序列化为字符串,然后再次反序列化为模型来解决问题。下面的代码对我有用。
1 2 3 | var content = response.Content; var jsonResult = JsonConvert.DeserializeObject(content).ToString(); var result= JsonConvert.DeserializeObject<Model>(jsonResult); |
这里的内容类似于“\”{\\”Id\\”:\\”92209\\”,\\”operatorId\\”:100000,\\”Status\\”:true}”