.NET 6新特性试用 | 可写JSON DOM API

前言

我们常用JSON的方式,是将类对象序列化/反序列化:

var user = new User { Name = "My IO" };
var json = JsonSerializer.Serialize(user);
var newUser = JsonSerializer.Deserialize<User>(json);

而通过System.Text.Json提供的可写JSON DOM API,我们可以跳过创建类,直接操作JSON DOM。

Demo

1.增

可以使用下面2个类去创建JSON DOM:

  • JsonObject: 创建JSON对象

  • JsonArray: 创建JSON数组

示例代码如下:

var jsonObject = new JsonObject { ["Value"] = "My IO", ["Object"] = new JsonObject { ["Name"] = "My IO Child" },["ObjectArray"] = new JsonArray(new JsonObject { ["Name"] = "1",["ValueArray"] = new JsonArray(1, 2),},new JsonObject {["OtherName"] = "2"})
};var jsonString = jsonObject.ToJsonString(new JsonSerializerOptions { WriteIndented = true });Console.WriteLine(jsonString);// 输出
{"Value": "My IO","Object": {"Name": "My IO Child"},"ObjectArray": [{"Name": "1","ValueArray": [1,2]},{"OtherName": "2"}]
}

可以看到,JsonObject和JsonArray可以嵌套使用生成JSON DOM节点树,而每一DOM节点上的属性都用键值对表示,并且同一数组中的不同节点的属性也可以不一样。

2.查

可以使用下面类去解析JSON DOM:

  • JsonNode: 解析Json字符串并从节点获取值

示例代码如下:

var newJsonObject = JsonNode.Parse(jsonString);Console.WriteLine(newJsonObject["ObjectArray"][0]["Name"]);//输出
1

可以看到,通过属性名和索引轻松访问任意JSON DOM节点。

同时,也可以转换成JsonObject和JsonArray对象,并且可以使用GetValue方法获取强类型的值:

if (newJsonObject["ObjectArray"] is JsonArray jsonArray)
{for (int i = 0; i < jsonArray.Count; i++){if (jsonArray[i]["Name"] is JsonObject nameObject){string name = nameObject.GetValue<string>();Console.WriteLine(name);}}
}//输出
1

3.改

可以修改现有节点上的属性值:

newJsonObject["Value"] = "New Value";

也可以为节点加上属性:

newJsonObject["Object"]["NewName"] = "New Name";

甚至增加新节点:

newJsonObject["NewObject"] = new JsonObject { ["Name"] = "New Object" };

4.删

虽然没有提供删除节点的方法,但是可以通过将节点设为null,序列化时忽略来变通实现:

newJsonObject["Object"]["NewName"] = null;
newJsonObject["NewObject"] = null;jsonString = jsonObject.ToJsonString(new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull });

结论

希望本文对你了解可以JSON DOM API有所帮助。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网页设计的css样式,网页设计引入CSS样式的五种方式_css

一、使用STYLE属性将STYLE属性直接加在个别的元件标签里&#xff0c;&#xff1c;元件(标签) STYLE”性质(属性)1: 设定值1; 性质(属性)2: 设定值2; …}例如&#xff1a;&#xff1c;TD STYLE”COLOR:BLUE; font-size:9pt; font-family:”标楷体”; line-height:150%&#xff1…

C#薪水和前途

这1&#xff0c;2年有更新简历&#xff0c;一直在看市场行情&#xff0c;最近这么多年在聊C#的薪水&#xff0c;我也说说我看到的情况&#xff0c;只限上海&#xff1b; 仅供大家参考&#xff1b; 高端职位&#xff1a; 纯技术&#xff0c;不谈管理&#xff0c; 一般是架构师职…

Heritrix 3.1.0 源码解析(十一)

上文分析了Heritrix3.1.0系统是怎么添加CrawlURI curi对象的&#xff0c;那么在系统初始化的时候&#xff0c;是怎么载入CrawlURI curi种子的呢&#xff1f; 我们回顾前面的文章&#xff0c;在我们执行采集任务的launch指令的时候&#xff0c;实际会调用CrawlController对象的v…

令人难忘的初吻描写......

1 我可以把你删了吗&#xff0c;我没有内存了&#xff08;via.豆瓣陈皮&#xff0c;侵删&#xff09;▼2 黑社会平时都在干些什么&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 老师头秃是有原因的▼4 是谁炸了珍珠港&#xff1f;&#xff08;素材来源网络&…

Android之获取应用程序(包)的大小-----PackageManager的使用(二)

http://blog.csdn.net/qinjuning/article/details/6892054 通过第一部分 << Android中获取应用程序(包)的信息-----PackageManager的使用(一) >>的介绍&#xff0c;对PackageManager以及 AndroidManife.xml定义的节点信息类XXXInfo类都有了一定的认识。 本部分的内…

eclipse创建maven多模块项目(单个类似)

2019独角兽企业重金招聘Python工程师标准>>> 1、下载安装maven 1.1、下载 注意&#xff1a;maven的版本&#xff0c;要根据你的jdk版本来下载。要不会安装失败&#xff0c;提示版本问题哦 Jdk 对应的maven版本如图:&#xff08;官网地址&#xff1a;http://maven.ap…

如何通过 C# 判断一个 路径 是本机还是远程 ?

咨询区 David Boike请问在 C# 中是否有好的方式判断 path 是在本地还是在远程,我想到了用 UNC 属性来判断&#xff0c;比如下面的代码&#xff1a;new Uri(path).IsUnc但这代码也有一定的问题,它会误判下面的 path 格式。\\machinename\sharename\directory \\10.12.34.56\shar…

交换系统接媒体服务器,基于软交换的媒体服务器的设计与实现

摘要&#xff1a;随着VoIP(Voice over Internet Protocol,俗称网络电话)的迅速发展,单纯的语音业务已经无法满足用户和市场的需求,因此一种具有多媒体业务的VoIP的方案——IP媒体服务器因此产生了。它可以提供更具个性化和差异性的增值业务,而且可以为提供商带来更高的利润。国…

Android 应用程序窗体显示状态操作(requestWindowFeature()的应用)

http://www.cnblogs.com/salam/archive/2010/11/30/1892143.html转载于:https://www.cnblogs.com/cliffhuang/p/3708696.html

web服务器的基本应用

WEB服务器也称为WWW(WORLD WIDE WEB)即是所谓的万维网服务器&#xff0c;主要功能是提供网上信息浏览服务。 最常用的大型Web服务器是Apache和微软的Internet信息服务器&#xff08;Internet Information Server&#xff0c;所谓的IIS服务器&#xff09;、IBM WebSphere以及BE…

Android 之PackageManager框架

http://blog.csdn.net/stonecao/article/details/6591454 1.接着前面讲的ActivityManager框架&#xff0c;继续说一下系统另一个重要的框架&#xff0c;PackagerManager 同样先看一下静态类结构图&#xff1a; 大部分情况我们是在Activity中使用getPackageManager方法获取一个…

有一个会泰勒级数的八岁表妹是怎样一种体验?

全世界只有3.14 % 的人关注了爆炸吧知识上一篇文章超模君给大家介绍了欧拉公式&#xff0c;很多粉丝问我&#xff1a;八岁表妹明明还是小学生&#xff0c;是怎么知道泰勒级数的意思的?答案其实很简单&#xff0c;这当然和我们全家优秀的基因...不&#xff01;优良的家教有关&a…

限流中间件IpRateLimitMiddleware的使用

前言IpRateLimitMiddleware&#xff08;Github: AspNetCoreRateLimit&#xff09; 是ASPNETCore的一个限流的中间件&#xff0c;用于控制客户端调用API的频次&#xff0c; 如果客户端频繁访问服务器&#xff0c;可以限制它的频率&#xff0c;已降低访问服务器端的压力。或者如果…

对抗告警疲劳的8种方法

【编者按】本文作者为 Chris Riley&#xff0c;主要介绍告警疲劳的产生原因与对抗告警疲劳的8种方法。文章系国内 ITOM 管理平台 OneAPM 编译呈现。 各司其职、孤军作战非常不利于团队沟通&#xff0c;一旦发生重大事件&#xff0c;各个部门就很难掌握事件始末&#xff0c;这不…

EL表达式

一、EL简介 1.语法结构 ${expression}2.[]与.运算符 EL 提供.和[]两种运算符来存取数据。 当要存取的属性名称中包含一些特殊字符&#xff0c;如.或?等并非字母或数字的符号&#xff0c;就一定要使用 []。例如&#xff1a; ${user.My-Name}应当改为${user["My-Name&quo…

制作Geek风格的投影片

做投影片用什么&#xff1f;如果你的回答是用PowerPoint&#xff0c;有没有感觉弱爆了&#xff1f;好吧&#xff0c;也许你会说用开源的替代&#xff0c;比如openOffice/Libreoffice。当然其实本质都是一样的&#xff0c;那就是PPT&#xff01;从今天开始不要再说、再用 PPT这三…

Activity之launchMode:singleTop,singleTask与singleInstance

相关内容&#xff0c;可以参见官方网址&#xff1a; http://developer.android.com/guide/components/tasks-and-back-stack.html 如图所示&#xff0c;如果ABC三个Activity的launchMode都是standard&#xff0c;那么按照图示顺序调用后&#xff0c;堆栈为ABCBB&#xff1b; …

傅立叶变换是如何改变我们生活的? ——四个角度告诉你答案

全世界只有3.14 % 的人关注了爆炸吧知识引子&#xff1a;尽管没有微积分那样如雷贯耳的名声&#xff0c;也没有相对论那般独辟蹊径的创新&#xff0c;傅立叶变换却悄悄地潜藏在我们生活中的方方面面&#xff0c;默默地改变着这个世界。对于工科出身的读者而言&#xff0c;傅立叶…

Win11新版右键菜单用不惯?一键切换回Win10经典版!

在 Windows 11 操作系统中&#xff0c;微软对文件资源管理器和应用程序的上下文菜单&#xff08;Context Menu&#xff0c;俗称“右键菜单”&#xff09;进行了现代化改造。Windows 11 新版右键菜单更加简约&#xff0c;并且融入圆角设计&#xff0c;将常用的命令剪切、复制、粘…

Careercup - Google面试题 - 4877486110277632

2014-05-08 05:16 题目链接 原题&#xff1a; Given a circle with N defined points and a point M outside the circle, find the point that is closest to M among the set of N. O(LogN) 题目&#xff1a;给定一个圆上的N个点&#xff0c;和一个在这个圆外部的点。请找出这…