C#使用Newtonsoft直接读取Json格式文本(Linq to Json)

    Newtonsoft是比较老的Json序列化和反序列化API,但是版本并不老,它完美的支持.NET Core以上版本。其实Newtonsoft除了序列化功能,还可以实现LINQ to JSON的功能,也就是不依赖对象(相对),用LINQ的方式直接读取json文本,这样的好处是,动态读取Json的时候如果对象不同字段名称相同就可以不依赖对象了。

使用方法

1、环境准备

新建一个.NET6项目,安装最新的包Newtonsoft,这里就不再讲述。

2、取对象中的一个字段

    在通常的方式获取一个Json的字段需要序列号Json后转换成对象(当然也可以有其它方法),为了取一个字段必须对对象依赖。这里用Newtonsoft中的JObject.Parse,一句代码解决。如下

string jsonstr = "{\"Id\":1,\"Name\":\"刘德华\",\"Age\":61}";
 //传统思维的做法 转成对象,System.Text.Json
var items = JsonSerializer.Deserialize<Pepole>(jsonstr);
var sel = items.Name;
 //LINQ to JSON
JObject items2 = JObject.Parse(jsonstr);
var sel2 = items2["Name"].ToString();
//对象
    public class Pepole
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public List<Pepole> Child { get; set; }
    }

    上面是最简单的用法。还有像写linq一样的用法。

3、取对象中的子集合

    还是继续上面的案例,刘德华会有儿女吧,假设刘德华有两个孩子,就是两个子对象,我们用LINQ to JSON获取他两个孩子的姓名和年龄。

string jsonstr = @"{\"Id\":1,\"Name\":\"刘德华\",\"Age\":61,
 \"Child\":[{\"Id\":5,\"Name\":\"刘小华\",\"Age\":6},{\"Id\":6,\"Name\":\"刘小德\",\"Age\":12}]}";
JObject items2 = JObject.Parse(jsonstr);
//下面一段代码取出刘德华孩子的姓名和年龄
var sel2 = items2["Child"].Select(s=>new{Name= s["Name"],Age= s["Age"] }).ToList();
//还可以这样来
var sel3 = from p in items2["Child"] select new {Name= (string)p["Name"], Age=(int)p["Age"] };
//sel2结果是个匿名对象集合,是刘德华的两个孩子,sel3同理

如果获取第一个孩子的名字可以使用SelectToken

string name = (string)items2.SelectToken("Child[0].Name");
//name为刘小华

如果刘德华还有孙子,使用SelectToken可以不断向下取出数据,也可以Select和SelectToken嵌套使用。其它API详情请查看官网:

https://www.newtonsoft.com/json/help/html/LINQtoJSON.htm

本文讲述了Newtonsoft的LINQ TO Json基本使用,注意JObject.Parse第一层只支持但单一对象,不支持集合。对于读取Json大家还有啥好的方案,欢迎留言讨论。

技术群:添加小编微信并备注进群
小编微信:mm1552923   公众号:dotNet编程大全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值