添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • Linux
  • Nginx
  • 数据库
  • Python
  • PHP
  • C#
  • .NET
  • WPF
  • MAUI
  • Blazor
  • WinForm
  • 帝国CMS
  • AKCMS
  • Typecho
  • 织梦CMS
  • Visual Studio
  • Windows
  • Mac
  • Web前端
  • 数据采集
  • 运营
  • 产品
  • 摩托车
  • 电影
  • 杂事
  • 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大家还有啥好的方案,欢迎留言讨论。

    本文作者:翔星 信息来源: 公众号 DotNet开发跳槽 所属分类: C# Power by Typecho. Theme by Puma. Written by 董川民- 独立开发者 渝ICP备16006207号-2 渝公网安备 50011202503233号

    友情链接: