.Net C# 包含数组格式的JSON字符串解析与反序列化

这篇博客介绍了如何使用.NET的Newtonsoft.Json库解析和反序列化包含数组的JSON字符串。首先,通过逐层解析JSON对象和数组,然后通过创建辅助类进行反序列化。文中提供了具体的代码示例,包括如何处理没有键值对的数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

包含数组格式的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
到此结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值