我从结构类似的URL获取字符串格式的JSON,但无法解析它。它引发了异常,您知道如何解析它吗?
结构如下:
{
"pathway":{
"patients":{
"patient":[
{
"patientid":"7703176",
"name":"Abbot, Bud",
"status":"Invited",
"start":"2013-12-07",
"last":"N/A",
"engagement":"N/A",
"drug":"N/A",
"adherence":"N/A",
"vitals":"Current",
"last_appointment":"2013-10-25",
"next_appointment":"None"
},
{
"patientid":"5089554",
"name":"Brennan, Bonnie",
"status":"Connected",
"start":"2013-12-29",
"last":"2014-02-01",
"engagement":"Low",
"drug":" ",
"adherence":" ",
"vitals":"Out of Date",
"last_appointment":"2013-04-21",
"next_appointment":"None"
}
]
}
}
}
我这样做是这样的:
public class PathWayWrapper
{
public pathway pathway { get; set; }
}
和
public class pathway
{
public List<patient> patients { get; set; }
}
和
public class patient
{
public long patientid { get; set; }
public string name { get; set; }
public string status { get; set; }
public string start { get; set; }
public string last { get; set; }
public string engagement { get; set; }
public string drug { get; set; }
public string adherence { get; set; }
public string vitals { get; set; }
public string last_appointment { get; set; }
public string next_appointment { get; set; }
}
这是我的解析代码:
StreamReader reader = new StreamReader(response.GetResponseStream());
string json = reader.ReadToEnd();
var Jsonobject = JsonConvert.DeserializeObject<PathWayWrapper>(json);
objPathway = Jsonobject.pathway;
您要反序列化的类是不正确的。您缺少“患者”类。
当我有JSON并尝试反序列化时,我喜欢使用http://json2csharp.com在反序列化类中生成第一个剪切。比尝试手动操作更准确。
var jsonobject = JsonConvert.DeserializeObject<RootObject>(json);
public class Patient
{
public string patientid { get; set; }
public string name { get; set; }
public string status { get; set; }
public string start { get; set; }
public string last { get; set; }
public string engagement { get; set; }
public string drug { get; set; }
public string adherence { get; set; }
public string vitals { get; set; }
public string last_appointment { get; set; }
public string next_appointment { get; set; }
}
public class Patients
{
public List<Patient> patient { get; set; }
}
public class Pathway
{
public Patients patients { get; set; }
}
public class RootObject
{
public Pathway pathway { get; set; }
}
PS:您得到的异常通常是一个很好的线索,说明您定义反序列化类的方式有问题。
无法反序列化当前JSON对象(例如{“ name”:“ value”})为类型'System.Collections.Generic.List`1 [ConsoleApplication1.Program + Patient]',因为该类型需要JSON数组(例如[1, 2,3])正确反序列化。
要解决此错误,可以将JSON更改为JSON数组(例如[1,2,3]),也可以更改反序列化类型,使其成为普通的.NET类型(例如,不像整数这样的原始类型,也不像这样的集合类型)数组或列表),可以从JSON对象反序列化。还可以将JsonObjectAttribute添加到类型中,以强制其从JSON对象反序列化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句