linq to json for sl

一.Linq to JSON是用来干什么的?

  Linq to JSON是用来操作JSON对象的.可以用于快速查询,修改和创建JSON对象.当JSON对象内容比较复杂,而我们仅仅需要其中的一小部分数据时,可以考虑使用Linq to JSON来读取和修改部分的数据而非反序列化全部.

二.创建JSON数组和对象

在进行Linq to JSON之前,首先要了解一下用于操作Linq to JSON的类.

类名说明
JObject
 用于操作JSON对象
JArray
 用语操作JSON数组
JValue
 表示数组中的值
JProperty
 表示对象中的属性,以"key/value"形式
JToken
 用于存放Linq to JSON查询后的结果

 

 

 

 

 

 

 

 

1.创建JSON对象

复制代码
            JObject staff = new JObject();staff.Add(new JProperty("Name", "Jack"));staff.Add(new JProperty("Age", 33));staff.Add(new JProperty("Department", "Personnel Department"));staff.Add(new JProperty("Leader", new JObject(new JProperty("Name", "Tom"), new JProperty("Age", 44), new JProperty("Department", "Personnel Department"))));Console.WriteLine(staff.ToString());
复制代码

结果:

除此之外,还可以通过一下方式来获取JObject.JArray类似。

方法  说明
JObject.Parse(string json)
json含有JSON对象的字符串,返回为JObject对象
JObject.FromObject(object o)

o为要转化的对象,返回一个JObject对象

JObject.Load(JsonReader reader)
reader包含着JSON对象的内容,返回一个JObject对象

 

 

 

 

 

 

2.创建JSON数组

复制代码
            JArray arr = new JArray();arr.Add(new JValue(1));arr.Add(new JValue(2));arr.Add(new JValue(3));Console.WriteLine(arr.ToString());
复制代码

结果:

三.使用Linq to JSON

1.查询
首先准备Json字符串,是一个包含员工基本信息的Json

string json = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29}] }";

①获取该员工的姓名

复制代码
            //将json转换为JObjectJObject jObj = JObject.Parse(json);//通过属性名或者索引来访问,仅仅是自己的属性名,而不是所有的JToken ageToken =  jObj["Age"];Console.WriteLine(ageToken.ToString());
复制代码

结果:

②获取该员工同事的所有姓名

复制代码
            //将json转换为JObjectJObject jObj = JObject.Parse(json);var names=from staff in jObj["Colleagues"].Children()select (string)staff["Name"];foreach (var name in names)Console.WriteLine(name);
复制代码

"Children()"可以返回所有数组中的对象

结果:

2.修改

①现在我们发现获取的json字符串中Jack的年龄应该为35

            //将json转换为JObjectJObject jObj = JObject.Parse(json);jObj["Age"] = 35;Console.WriteLine(jObj.ToString());

结果:

注意不要通过以下方式来修改:

            JObject jObj = JObject.Parse(json);JToken age = jObj["Age"];age = 35;

②现在我们发现Jack的同事Tom的年龄错了,应该为45

复制代码
            //将json转换为JObjectJObject jObj = JObject.Parse(json);JToken colleagues = jObj["Colleagues"];colleagues[0]["Age"] = 45;jObj["Colleagues"] = colleagues;//修改后,再赋给对象Console.WriteLine(jObj.ToString());
复制代码

结果:

3.删除
①现在我们想删除Jack的同事

            JObject jObj = JObject.Parse(json);jObj.Remove("Colleagues");//跟的是属性名称Console.WriteLine(jObj.ToString());

结果:

②现在我们发现Abel不是Jack的同事,要求从中删除

            JObject jObj = JObject.Parse(json);jObj["Colleagues"][1].Remove();Console.WriteLine(jObj.ToString());

结果:

4.添加
①我们发现Jack的信息中少了部门信息,要求我们必须添加在Age的后面

            //将json转换为JObjectJObject jObj = JObject.Parse(json);jObj["Age"].Parent.AddAfterSelf(new JProperty("Department", "Personnel Department"));Console.WriteLine(jObj.ToString());

结果:

②现在我们又发现,Jack公司来了一个新同事Linda

            //将json转换为JObjectJObject jObj = JObject.Parse(json);JObject linda = new JObject(new JProperty("Name", "Linda"), new JProperty("Age", "23"));jObj["Colleagues"].Last.AddAfterSelf(linda);Console.WriteLine(jObj.ToString());

结果:

四.简化查询语句

使用函数SelectToken可以简化查询语句,具体:
①利用SelectToken来查询名称

            JObject jObj = JObject.Parse(json);JToken name = jObj.SelectToken("Name");Console.WriteLine(name.ToString());

结果:

②利用SelectToken来查询所有同事的名字

            JObject jObj = JObject.Parse(json);var names = jObj.SelectToken("Colleagues").Select(p => p["Name"]).ToList();foreach (var name in names)Console.WriteLine(name.ToString());

结果:

③查询最后一名同事的年龄

            //将json转换为JObjectJObject jObj = JObject.Parse(json);var age = jObj.SelectToken("Colleagues[1].Age");Console.WriteLine(age.ToString());

结果:

转载于:https://www.cnblogs.com/songtzu/archive/2012/07/27/2612007.html

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

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

相关文章

计算机组装与维护实验指导,计算机组装与维护实验指导书.pdf

第 1 页计算机组装与维护实验指导书计算机组装与维护实 验 手 册姓名: 专业: 班级:第 2 页计算机组装与维护实验指导书目 录实验一 初识计算机部件组成(0.5 学时) ……………….. 3实验二 认识主板(0.5 学时) …………………………….. 5实验…

编程是一种艺术创作

软件正在吞噬世界 “软件正在吞噬世界。”——马克 安德森 马克 • 安德森 在新一轮的信息技术革命中,我们已经见证,软件对社会生产的方方面面,产生了深刻的影响,它们侵入并颠覆了已经建立起来的行业架构。越来越多的大企业和行业…

计算机支持协同工作不是多媒体应用,计算机支持的协同工作概观.PDF

计算机支持的协同工作概观维普资讯第 2卷第 3期 工 业 工 程 V0I.2No.3I999年 9月 SeP.1999计算机支持的协同工作概观汤 庸(广东_1_业大学 计算机科学 j上程系 广东 广州 510o9o)摘要 :cscw是 门多学科交叉的新 课题 率文介绍 csc…

loss值多少才算收敛_一个家庭一年要存多少钱才算正常?国家统计局给出“答案”...

阅读本文前,请您先点击上面的蓝色字体,再点击“关注”,这样您就可以继续免费收到最新文章了。每天都有分享。完全是免费订阅,请放心关注。免责声明:本文来源于网络,如有侵权请联系作者删除。“手里有粮&…

Asterisk权威指南/第三章 安装Asterisk

在这一章我们将详细介绍如何从源代码安装Asterisk。很多人回避这种方法,说它太难了,又耗时间。我们在这里想证明的是从源代码安装Asterisk其实没那么难。更重要的是,我们想为你提供一个最好的Asterisk安装,以便学习。 在本书中&a…

郑州升达经贸管理学院计算机专业学费,郑州升达经贸管理学院学费

郑州升达经贸管理学院学费2020-07-10 13:17:19文/叶丹2020年郑州升达经贸管理学院文科类本科专业学费15000元/年;郑州升达经贸管理学院理科类本科专业学费16000元/年。一般情况下,艺术类专业学费比普通专业高一些。郑州升达经贸管理学院依据省(市区)教育…

逻辑左移

逻辑左移转载于:https://www.cnblogs.com/LoveFishC/archive/2012/07/28/3846647.html

vue 搜索框header_vue项目header模块编写

前端学习的太差了,一个header写了半天才写个勉强能用的。vue-cli引入scssnpm install node-sass --savenpm install sass-loader --save从element-ui官方拷贝一个导航栏修改处理中心我的工作台选项1选项2选项3选项4选项1选项2选项3订单管理css样式完善/*顶部导航栏盒…

Asterisk权威指南/第五章 用户设备配置

本章我们将研究连接到Asterisk的用户设备,一般来说是某种形式的VoIP电话。在Asterisk中配置信道供设备使用相对来说比较简单,但你也需要配置设备本身以使得它知道向谁发起呼叫(这已经跟Asterisk没有关系了,每个硬件厂商都有自己的…

不愿意和别人打交道_参加完孩子学校的运动会,宝妈吐槽贫富圈子差距大,不适合打交道...

文|文儿我有一个发小,蛮有钱的,前两天参加完孩子的运动会,气呼呼地说“穷人就爱斤斤计较,千万不要轻易地跟他们打交道”。这是怎么回事呢?原来,我的这位发小,今年孩子转学上了小学二年级&#x…

中职计算机属于专业课还是文化课,对中职计算机专业建设探讨.doc

对中职计算机专业建设探讨对中职计算机专业建设探讨摘要:技能培养是职业教育的主旋律。对中职学校的计算机专业建设来说,职业教育者应首先明确培养目标,制订合理的教学计划,同时结合社会的需求,全面加强师资队伍的建设…

Asterisk权威指南/第六章 拨号计划基础

拨号计划是你的Asterisk系统的心脏。它定义了呼叫是如何流进和流出系统的。拨号计划用一种脚本语言写成的,Asterisk依照其中的指令响应外部触发。和传统电话系统相比,Asterisk的拨号计划是完全可定制的。 本章介绍Asterisk的基本概念。这里讲的内容对你…

hadoop loadBalance源码分析

项目hbase数据库出现很诡异的assignment ,region移动的src和dest都是同一台regionserver,不过时间戳不同,启动的只有一个regionserver, 不知道怎么出现了两个时间戳 分析下源码解决一下 loadbalance只有一个实现 org.apache.hado…

html 遍历div内check,vue+element中checkbox 实现遍历分组全选

1、html部分style"margin-left: 30px":indeterminate"item.isIndeterminate"v-model"item.isCheck"change"checkTitle(item.isCheck, index)">全选>v-model"item.checkedData"change"checkItem(item.checkedData…

homepod换wifi网络_如何实现短租网络自由,不必换房断网

对于在异地工作的人来说,租房一直是头疼的问题,要避开黑中介,房租不能太贵,还要离公司近,最好单间或者舍友不能太奇葩,要满足以上条件实在是太难了。其实最核心的问题是房租,押一付三&#xff0…

如何升级浏览器_手把手教你申请IOS14 Beta升级方法

就在最近苹果公司正式开放了IOS14 Public Beta 2还不了解IOS14的小伙伴参考一只废材:WWDC2020 之 IOS14 篇(内含升级方法和个人体验参考)​zhuanlan.zhihu.com本期废材就来教大家如何申请升级操作方法简单易懂又官方本方法每次发布版本更新都…

树的直径,树的最长路dp思想

dp一直弱死了,树型dp很多基本的题都不会,最近在刷树型dp的题,把关于树的最长路的思想总结一下: 树的直径:树中距离最远的两点间的距离。 下面说几道题: hdu 2196:对于树上(双向边&am…

xLite连接asterisk提示sip408错误

xLite连接asterisk提示sip408错误 1.sip408应答代码全文 408 Request Timeout 在一段时间内,服务器不能产生一个终结应答,例如,如果它无法及时决定用户的位置。客户端可以在稍后不更改请求的内容然后重新尝试请求。 2.原因:造成…

linux sd卡 读写速度测试_铠侠(原东芝存储)SD卡,大容量存储时代,高速读写选择...

作为一个经常出去旅行的旅游博主,在旅行过程中,还是有很多拍摄的需求。无论是存储美图,还是视频,一个大容量、安全可靠的储存卡还是很有必要的。这既可以缓解因为容量不够,频繁导数据的尴尬。又不会因为数据丢失&#…

软件测试需求分析录音,谈一谈软件测试需求分析

在软件测试过程中我们首先要做的就是分析测试需求,一般都是由客户方给出,测试需求应该全部覆盖已定义的业务流程,以及功能和非功能方面的需求。分析软件测试需求是一个不可或缺的步骤,因为它有利于保证测试的质量和进度&#xff0…