C#解析json的几种方式
json格式的数据是javascript原生的一种数据格式,比xml更简洁。
它有两种形式:json对象和json对象数组。
在此之前,有必要解释几个基本概念:
json字符串,就是string,它一定是由双引号包起来的,如"{'name':'jerry'}"。这是一个string,尽管去掉双引号后它就是一个json对象。
json对象,就是以大括号开头的对象,如{"name":"jerry"}; 而获取name值的方式就是 json.name 或者 json["name"];
json数组,就是以中括号开头的json对象数组,如[{"name":"tom"},{"name":"jerry"}];获取值的方式是 json[0].name 或 json[0]["name"]; //这里取第一个name
搞清楚基本概念后,理解起来就容易了。
而把符合json格式的string,转换成json对象并提取其中值的方法,就是本文要重点介绍的。
(一):引用 newtonsoft.json.linq命名空间
json对象
在C#中可以,利用其JObject类进行一些操作:
- string json = "{'name':'terry','age':'21'}";
- JObject jsonObj = JObject.Parse(json); //尝试将字符串转换成json对象
- string name = jsonObj["name"]; //在js中习惯用jsonObj.name,这里不行
- string age = jsonObj["age"];
- Response.Write(name + "<br />" + age);
json数组
类似JObject,这里借助JArray类:
- string json = "[{'name':'tom'},{'name':'jerry'},8,10]";
- JArray arr = JArray.Parse(json); //尝试将字符串转换成json数组
- Response.Write(arr[]["name"]); //输出jerry
其实这个json数组很奇怪,第三个和第四个没有键值对了,就一个值,也是可以解析的:
- Response.Write( arr[] ); //输出10
(二):引用 newtonsoft.json命名空间
1.需要建立与json相对应的类:
- public class Person
- {
- public string Name { get; set; }
- public int Age { get; set; }
- }
2.string转对象
- string json = "{'Name':'tom','Age':'21'}";
- Person p = JsonConvert.DeserializeObject<Person>(json); //将字符串转换成json对象
- Response.Write(p.Name); //输出tom.这里不能p["Name"]
3.string转数组
- string json = "[{'Name':'a','Age':1},{'Name':'b','Age':2}]";
- List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json);//用List作为容器装Person数组
- Response.Write(persons[].Name); //输出a.这里不能persons[0]["Name"]
这个把string转换成对象或者数组的过程,叫做反序列化。
说到反序列化,顺便提一下序列化。
序列化,指把对象和数组变为字符串的过程。
例1.
- Person p = new Person(){Name="jerry" , Age=};
- string json = JsonConvert.SerializeObject(p);
例2.
- List<Person> persons=new List<Person>()
- {
- new Person(){ Name="a",Age=},
- new Person(){ Name="b",Age=},
- new Person(){ Name="c",Age=},
- new Person(){ Name="d",Age=}
- };
- string json = JsonConvert.SerializeObject(persons)
这里不区分JArray和JObject,都是用JsonConvert.SerializeObject()方法;
(三):引用 System.Web.Script.Serialization命名空间
这个的好处在于适合某些没有newtonsoft.dll文件的环境
用法和(二)也差不多,只不过不再是静态方法,而是需要实例化
1.建立与json相对应的类:
- public class Person
- {
- public string Name { get; set; }
- public int Age { get; set; }
- }
2.string转对象
- string json = "{'Name':'tom','Age':'21'}";
- Person p = (Person)new JavaScriptSerializer().Deserialize(json, new Person().GetType()); //将字符串转换成json对象
- Response.Write(p.Name); //输出tom.这里不能p["Name"]
3.string转数组
- string json = "[{'Name':'a','Age':1},{'Name':'b','Age':2}]";
- List<Person> persons = (List<Person>)new JavaScriptSerializer().Deserialize(json, new List<Person>().GetType());//用List作为容器装Person数组
- Response.Write(persons[].Name); //输出a.这里不能persons[0]["Name"]
这是反序列化,下面讲序列化
例1.
- Person p = new Person(){Name="tom" , Age=};
- string json = new JavaScriptSerializer().Serialize(p);
例2.
- List<Person> persons=new List<Person>()
- {
- new Person(){ Name="a",Age=},
- new Person(){ Name="b",Age=},
- new Person(){ Name="c",Age=},
- new Person(){ Name="d",Age=}
- };
- string json = new JavaScriptSerializer().Serialize(persons);
序列化的时候同样不区分对象或是数组。
它与(二)的区别,据说是效率问题(二效率更高),没有具体考证过。
C#解析json的几种方式的更多相关文章
- unity解析json的两种方式
一直比较钟情于json,用来做数据交互,堪称完美!下面简单说一下unity使用C#脚本如何解析json数据吧. 一.写解析类,借助于JsonUtility.FromJson 直接给个例子吧 1.jso ...
- 解析JSON的三种方式
JSONObject JSONObject jsonObject = new JSONObject(strJson); JSONArray jsonArray = jsonObject.getJS ...
- 解析JSON有俩种方式:JSONObject和GSON
JSONObject: //JSONObject解析JSON文件 private void parseJSONWithJSONObject(String json_data) { try { JSON ...
- C#解析json的两种方式
C#中Json转换主要使用的几种方法! 这篇主要介绍2.4.第三种方法使用的比较局限,所以我没有深入学习. 第二种方法 我使用比较多的方式,这个方法是.NET内置的,使用起来比较方便 A.利用seri ...
- go 中解析JSON的三种姿势
背景 这是一篇写给0-1年新人的文章,短平快的教会你如何解析json字符串. 示例Json 假设有如下json字符串: { "userName":"admin" ...
- 解析JSON的两种方法eval()和JSON.parse()
解析JSON 一种方法是使用eval函数. var dataObj = eval("("+json+")"); 必须把文本包围在括号中,这样才能避免语法错误,迫 ...
- python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)
昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...
- Golang解析json的几种方法
Golang解析json的几种方法 概要 使用Golang调用其它平台API接口时总会被多层的json串给恶心到,我记录一下自己解析json的几种方法. 一.自带的json包 func JsonUnm ...
- JAVA解析XML的四种方式
java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...
随机推荐
- UNIX网络编程——TCP 滑动窗口协议
什么是滑动窗口协议? 一图胜千言,看下面的图.简单解释下,发送和接受方都会维护一个数据帧的序列,这个序列被称作窗口.发送方的窗口大小由接受方确定,目的在于控制发送速度,以免接受方的缓存不够大, ...
- lk中内联调用的dsb()
lk中内联调用的dsb() 比如lk的uart_dm_init()函数就调用了dsb() /* Configure the uart clock */ clock_config_uart_dm(id) ...
- mysql DISTINCT 的实现与优化
DISTINCT实际上和GROUP BY的操作非常相似,只不过是在GROUP BY之后的每组中只取出一条记录而已.所以,DISTINCT的实现和GROUP BY的实现也基本差不多,没有太大的区别.同样 ...
- 2015年iOS开发工程师前景分析
"互联网+"概念的提出催生了大量互联网企业,越来越多的传统行业需要与互联网更深地渗透与融合.而在这股互联网化的浪潮中,行业却发现找不到优秀的互联网人才. 互联网企业数量持续增长,用 ...
- Android反编译获取资源文件-android学习之旅(69)
有时候你看到一些很好看的布局,会考虑别人怎么实现的,回想参考一下,那么这时候反编译一下是很必要的. 要用到的工具apktool.bat和aapt.exe和apktool.jar(要最新版本) 下载前两 ...
- 08_Android中的SimpleAdapter的使用
1 目的界面 2.编写Android清单文件 <?xml version="1.0" encoding="utf-8"?> <manif ...
- Variant does not reference an auomation object
今天两个用户突然报错. 应用场景:审核或撤审核 字面意思:变量无法映射到对象,应该是调用对象的时候找不到.会不会是杀毒软件删除掉了. 两个用户都用了瑞星杀毒,哥不是黑,确实.应该是审核元被删掉 了. ...
- H5学习之旅-H5的块标签的使用(9)
块元素的基本语法 1. Html块元素 ,块元素在开始时候通常以新行开始,比如h1,p,ul 2.内联元素,通常不会以新行开始,比如a,b,img 3.html的div元素,div也被称为块元素,其主 ...
- 一篇详细的linux中shell语言的字符串处理
1 cut是以每一行为一个处理对象的,这种机制和sed是一样的.(关于sed的入门文章将在近期发布) 2 cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢? cut命令主要 ...
- 《java入门第一季》之面向对象(多态向下转型)
上一篇博客(http://blog.csdn.net/qq_32059827/article/details/51328638)最后对多态的弊端做了显示,这里解决这个弊端.如下: /* 多态的弊端: ...