问题描述
我有这门课:
public class ParseJson
{
private HttpClient _client;
public ParseJson()
{
_client = new HttpClient();
}
public async Task<List<Calibration>> LoadJsonAsync()
{
using (StreamReader r = new StreamReader("Json\\calibration.json"))
{
string responseString = r.ReadToEnd();
Console.WriteLine("responseString: " + responseString);
try
{
var values = JsonConvert.DeserializeObject<Dictionary<string,string>>(responseString);
if ((values["DataType"]).Equals("Calibration_Symptoms"))
{
calibrationClass.CalibrationData(values: values);
}
}
catch (Exception e)
{
Console.WriteLine("Json Exception: " + e);
}
List<Calibration> items = JsonConvert.DeserializeObject<List<Calibration>>(responseString);
return items;
}
}
}
当我运行它时,我得到这个异常:
Json 异常:Newtonsoft.Json.JsonSerializationException:将值“DataType”转换为“System.Collections.Generic.Dictionary2[System.String,System.String]'. Path '',line 1,position 10. ---> System.ArgumentException: Could not cast or convert from System.String to System.Collections.Generic.Dictionary
2[System.String,System.String]”时出错。
在 Newtonsoft.Json.Utilities.ConvertUtils.EnsureTypeAssignable(Object value,Type initialType,Type targettype)
在 Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(对象初始值,文化信息文化,类型目标类型)
在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader,Object value,CultureInfo culture,JsonContract contract,Type targettype)
--- 内部异常堆栈跟踪结束 ---
在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader,Type targettype)
在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader,Type objectType,JsonProperty member,JsonContainerContract containerContract,JsonProperty containerMember,Object existingValue)
在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader,Boolean checkAdditionalContent)
在 Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader,Type objectType)
在 Newtonsoft.Json.JsonConvert.DeserializeObject(字符串值,类型类型,JsonSerializerSettings 设置)
在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值,JsonSerializerSettings 设置)
在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
在 HelloWorld.ParseJson.d__2.MoveNext() 在 C:\Users\User\source\repos\HelloWorld\ParseJson.cs:line 31
我知道我可以创建一个模型并反序列化,但最终我希望读取不同的 Json 并反序列化。
有什么办法可以将它反序列化为 Dictionary<string,string>
?
仅供参考,这是我目前使用的 json:
"DataType": "Calibration_Symptoms","playerHeight": 1.6739861965179443,"armSpan": 1.572389006614685,"calibratedHeadPosition": {
"x": 0.10129322111606598,"y": 1.6739861965179443,"z": -0.01975761353969574
},"symptomSeverity": 0,"scat5SymptomsQs": [],"rightHanded": true,"rightFooted": true,"testType": false,"trialSymptomsQs": {
"Gait": [1,2,3],"Balance1": []
}
}
解决方法
我将其更改为 var values = JsonConvert.DeserializeObject<Dictionary<string,object>>(responseString);
。