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是以层次结构组织的节点或信息片断的集合.这 ...
随机推荐
- Android开发学习之路--UI之初体验
之前都是学习Activity,对于布局都没有做过学习,这里就简单学习下吧.下面看下Android Studio下有哪些控件: 这里分为Widgets,Text Fields,Containers,Da ...
- android打包方法超过65k错误
近日,Android Developers在Google+上宣布了新的Multidex支持库,为方法总数超过65K的Android应用提供了官方支持. 如果你是一名幸运的Android应用开发者,正在 ...
- (二)php的常量和变量
[php在命令行下接收参数] 如果在命令行调试php,传入的参数通过$argv获取,注意其中包含了文件名这一个元素,数组中元素的个数通过$argc获取. [可变变量] 指的是变量的名称可变,变量的标识 ...
- Volley请求
1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...
- 用 boost::multi_index 管理玩家
用 boost::multi_index 管理玩家(金庆的专栏)网游服务器上的玩家集合需要多种索引:如用ID查找,角色名查找, 用登录时分配的会话ID查找.用boost::multi_index进行玩 ...
- Libgdx 1.5.2发布
[1.5.2] - 修复问题 #2433 - 修复LWJGL在Mac OS X的本地载入问题 [1.5.1] - Gradle 升级到 2.2 - Android Gradle 工具升级到 1.0.0 ...
- (五十五)iOS多线程之GCD
GCD的全称为Grand Central Dispatch,翻译为大中央调度,是Apple开发的一个多线程编程解决方法. 进程和线程的概念: 正在进行中的程序被称为进程,负责程序运行的内存分配,每一个 ...
- html案例详解(一)
一.入门. <html> <!-- 头信息的作用 1. 可以设置网页的标题. 2. 可以通知浏览使用指定的码表解释html页面. 3. --> <head> < ...
- Leetcode_96_Unique Binary Search Trees
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43198929 Given n, how many stru ...
- [转]smail语法 详解
大家都应该知道APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,例如修改后缀后用RAR打开鳄鱼小顽皮APK能看到的是(Google Play下载的完整版版 ...