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是以层次结构组织的节点或信息片断的集合.这 ...
随机推荐
- sql的索引:网上看到不错,整理成自己的东西
数据库建立索引可以提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable(ID INT NOT NULL,username VARCHAR(16) NOT NU ...
- Android初级教程短信防火墙
如果你有女神,而且有情敌的话,你看到这篇文章会有一种窃喜的感觉. 需求:对情敌的号码进行拦截,让女神手机永远收不到它的号码. 首先定义一个广播接收者类: package com.example.sms ...
- LCD 常用的客观效果指标和测试方法
1.DPI--精密度: 评分标准 DPI 评分 DPI<200 50 200≤DPI<250 60 250≤DPI<300 70 300≤DPI<350 80 350≤DPI& ...
- 02网格布局Gridlayout
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8& ...
- Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite
Android数据库框架--GreenDao轻量级的对象关系映射框架,永久告别sqlite 前不久,我在写了ORMLite这个框架的博文 Android数据库框架--ORMLite轻量级的对象关系映射 ...
- Eclipse中查看没有源码的Class文件的方法
本文地址:http://blog.csdn.net/sushengmiyan/article/details/18798473 本文作者:sushengmiyan 我们在使用Eclipse的时候,经常 ...
- H5学习之旅-H5的超链接以及图片链接(6)
链接内容 1.文本链接 2.图片链接 属性 href:指向另一个文档的链接 name:文档内部的链接 img标签属性 alt:替换文本属性 width:宽 height:高 代码实例 <!DOC ...
- [Ext.Net]客户关系管理系统
本人在企业中非专业人士,交流学习. 1.登录 2.系统主界面 3.用户与角色 3.菜单管理 4.角色与授权 5.登陆日志 6.简易工作流 7.客户分类 8.客户管理 9.报价管理 业务员反馈 报价明细 ...
- 【翻译】Ext JS最新技巧——2014-9-10
原文:Top Support Tips Greg Barry:删除网格单元格的焦点 在Ext JS 5.0.1,添加了一些与可访问性和支持ARIA有关的显著改进.虽然鼓励使用这些新增功能,但默认样式可 ...
- PDA智能设备解决方案打包及部署
演练:打包智能设备解决方案以便进行部署 Visual Studio 2008 本演练演示如何使用 Visual Studio 将应用程序及其资源打包到一个 CAB 文件中,以便可将其部署到最终用户的智 ...