包含数组格式的json字符串的解析
最近学习接口调用返回json格式的字符串的时候遇到了解析json字符串的问题,简单的做一下学习笔记。
json格式如下:
首先,.Net解析json要添加一下Newtonsoft.Json引用。接下来我将介绍两种方法对上面的json进行解析。
一、一层层解析
一层层的解析的好处就是不用新建实体,想取哪个字段便取哪个字段,简单的示例代码如下:
string testJson = "{\"grade\": \"三年级\",\"code\": \"class-003\",\"student\": [{\"ID\": \"100001\",\"Name\": \"张三\"},{\"ID\": \"100002\",\"Name\": \"李四\"}],\"schoolMessage\":[\"清华小学\",\"省级示范小学\"]}";
JObject jsonObj = JObject.Parse(testJson);
string grade = jsonObj["grade"].ToString();
string code = jsonObj["code"].ToString();
JArray jsonAry = JArray.Parse(jsonObj["student"].ToString());
JObject stu1Obj = JObject.Parse(jsonAry[0].ToString());
string id1 = stu1Obj["ID"].ToString();
string name1 = stu1Obj["Name"].ToString();
JObject stu2Obj = JObject.Parse(jsonAry[1].ToString());
string id2 = stu2Obj["ID"].ToString();
string name2 = stu2Obj["Name"].ToString();
JArray schoolAry = JArray.Parse(jsonObj["schoolMessage"].ToString());
string schoolName = schoolAry[0].ToString();
string schoolTitle = schoolAry[1].ToString();
这个方法比较简单,json中的对象用对象获取,数组转换为JArray数组即可,下面介绍第二种方法。
二、反序列化
首先,新建辅助类,通过观察json格式不难发现,我们需要创建两个类,示例代码如下:
public class School
{
public string grade { get; set; }
public string code { get; set; }
public List<Students> student { get; set; }
public List<string> schoolMessage { get; set; }
}
public class Students
{
public string ID { get; set; }
public string Name { get; set; }
}
注意观察我将学生信息放到了Students类型的集合里,而schoolMessage用了一个string集合来接收,主要是上面的json字符串中的schoolMessage中不包含键值对,这一点是和student数组不同的地方。接下来便可实现json的反序列化,示例代码如下:
School jsonSchool = (School)JsonConvert.DeserializeObject(testJson, typeof(School));
如果想取出每个值验证一下也行,如下:
string grade = jsonSchool.grade;
string code = jsonSchool.code;
string id1 = jsonSchool.student[0].ID;
string name1 = jsonSchool.student[0].Name;
string id2 = jsonSchool.student[1].ID;
string name2 = jsonSchool.student[1].Name;
string schoolName = jsonSchool.schoolMessage[0].ToString();
string schoolNameTitle = jsonSchool.schoolMessage[1].ToString();
ok
到此结束。