写在开头:

最近项目需求,需要在C#中处理json字符串,毫不犹豫的下载了Newtonsoft.Json 4.5.11(2012.12.17)http://json.codeplex.com/,然后百度教程,还比较多(心喜),大致方法类似如下:

[csharp] view plaincopy

  1. using Newtonsoft.Json;
  2. using System.Text;
  3. StringBuilder sb = new StringBuilder();
  4. string str = "[{ID:'1',Name:'John',Other:[{Age:'21',Sex:'0'}]},{ID:'2',Name:'Good',Other:[{Age:'36',Sex:'1'}]}]";
  5. JavaScriptArray javascript = (JavaScriptArray)JavaScriptConvert.DeserializeObject(str);
  6. for (int i = 0; i < javascript.Count; i++ )
  7. {
  8. JavaScriptObject obj = (JavaScriptObject)javascript[i];
  9. sb.Append("ID:" + obj["ID"].ToString());
  10. sb.Append("Name:" + obj["Name"].ToString());
  11. JavaScriptArray json = (JavaScriptArray)obj["Other"];
  12. for (int j = 0; j < json.Count; j++){
  13. JavaScriptObject jsonobj = (JavaScriptObject)json[j];
  14. sb.Append("Age:" + jsonobj["Age"].ToString());
  15. sb.Append("Sex:" + jsonobj["Sex"].ToString());
  16. }
  17. }

还有一种方法是:

[csharp] view plaincopy

  1. string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
  2. JsonReader reader = new JsonReader(new StringReader(jsonText));
  3. while (reader.Read())
  4. {
  5. textBox1.Text += "TokenType = " + reader.TokenType + "   ValueType =  " + reader.ValueType + "   Value = " + reader.Value + "\r\n";
  6. }

第一种方法编译直接出错,根本不识别JavaScriptArray,JavaScriptObject,就连JavaScriptConvert方法也木有,靠!那好吧,第二种总行了吧,提示:

错误 2 无法创建抽象类或接口“Newtonsoft.Json.JsonReader”的实例

这是要闹哪样???

后面查看了Newtonsoft.Json库中的方法,根本没有嘛!再百度,终于有位仁兄说在新版中JavaScriptArray变成了JArray,顺着这个思路,发现变化如下:

[csharp] view plaincopy

  1. JavaScriptArray--->JArray
  2. JavaScriptConvert--->JsonConvert
  3. JavaScriptObject--->JObject

仔细看看,人家这样改更规范了嘛!

使用方法总结:

1、较简单的一种

[csharp] view plaincopy

  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Linq;
  3. string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
  4. JArray ja =(JArray) JsonConvert.DeserializeObject(jsonText);
  5. JObject o = (JObject)ja[1];
  6. Console.WriteLine(o["a"]);
  7. Console.WriteLine(ja[1]["a"]);

2、自定义对象列表

定义一个对象:

[csharp] view plaincopy

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. /// <summary>
  6. ///Customer 的摘要说明
  7. /// </summary>
  8. public class Customer
  9. {
  10. //在序列化前后没有变动
  11. public string a { get; set; }
  12. //在序列化前后设置和重置
  13. public string b { get; set; }
  14. //设置为null,但在序列化后填充
  15. public string c { get; set; }
  16. public string Other { get; set; }
  17. public Customer()
  18. {
  19. //
  20. //TODO: 在此处添加构造函数逻辑
  21. //
  22. a = "";
  23. b = "";
  24. c = "";
  25. Other = null;
  26. }
  27. }

反序列化json字符串:

[csharp] view plaincopy

  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Linq;
  3. string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
  4. List<Customer> _list = JsonConvert.DeserializeObject<List<Customer>>(jsonText);
  5. Console.WriteLine(_list[1].a);
  6. foreach (Customer c in _list)
  7. {
  8. Console.WriteLine(c.c);
  9. }

我感觉两种方法各有好处,第二种虽然需要再写一个对象,但可以像在js里面一样使用,感觉很爽!

作者:kunoy
申明:作者写博是为了总结经验,和交流学习之用。 如需转载,请尽量保留此申明,并在文章页面明显位置给出原文连接。谢谢!

Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串的更多相关文章

  1. JSON转JS对象,JS对象转JSON

    一.从服务端发来的json字符串,怎么才能作为JavaScript对象(JSON对象)在web端调用呢? 1.如果使用jQuery,就很方便了,可以在ajax一系列函数中,把参数Datatype传js ...

  2. 用Newtonsoft将json串转为对象的方法(详解)

    首先,将json串转为一个JObject对象: JObject jo = (JObject)JsonConvert.DeserializeObject(CurrentSelectedItemReq) ...

  3. 在.NET中使用Newtonsoft.Json转换,读取,写入的方法介绍

    全局引用 using Newtonsoft.Json; using Newtonsoft.Json.Converters; //把Json字符串反序列化为对象 目标对象 = JavaScriptCon ...

  4. Newtonsoft.Json.dll反序列化JSON字符串的方法

      1.直接反序列化JSON字符串 //引用序列化.反序列化JSON字符串用到的空间 using Newtonsoft.Json; using Newtonsoft.Json.Linq; //定义一个 ...

  5. .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程

    JSON作为一种轻量级的数据交换格式,简单灵活,被很多系统用来数据交互,作为一名.NET开发人员,JSON.NET无疑是最好的序列化框架,支持XML和JSON序列化,高性能,免费开源,支持LINQ查询 ...

  6. Newtonsoft.Json.dll 反序列化JSON字符串

    上一篇JSON博客<JSON入门级学习小结--JSON数据结构>中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的: 如今因为项目需求(asp.net web网站,前台向 ...

  7. PCB MS SQL 存储过程(CLR) 实现Json转DataTable表的方法

    一.准备需转为DataTable的json字符串 原json字符串数据 [{"TechName":"ECN","TechNo":" ...

  8. 记录一次关于Cookie、Json中文乱码的解决方法

    今天工作上遇到一个问题,需要把一个对象集合List<Model>存入一个Cookie,按照原来都封装方法存入都ok,但是到取值都时候中文会变成乱码. 首先,我们可以确认Json和Cooki ...

  9. jQuery中的$.extend方法来扩展JSON对象及合并,方便调用对象方法

    $.extend方法可以扩展JSON对象,用一个或多个其他对象来扩展一个对象,返回被扩展的对象. 例一 合并 settings 和 options,修改并返回 settings var setting ...

随机推荐

  1. Eclipse的工程名有红色的感叹号,工程里面没有显示编译错误

    在导入其他人或配套光盘中的工程时,经常会出现这种错误. 问题的原因: 通常是JRE的版本不同造成的. 解决的办法: 是选择工程名,然后通过在右键菜单中选择build path->configue ...

  2. 急!急!急!请问win32api参数乱码如何解决!

    我想做一个QQ自动登陆,使用的QQ是2009.现在先模拟打开QQ,然后通过api调用回调函数.回调函数为一个委托方法,但是在方法中整个参数乱码,请问如何解决? 具体流程为,启动QQ,获取当前启动QQ的 ...

  3. 前端读者 | 百度前端编码规范(HTML)

    本文来自:百度FEX 1 前言 HTML 作为描述网页结构的超文本标记语言,在百度一直有着广泛的应用.本文档的目标是使 HTML 代码风格保持一致,容易被理解和被维护. 2 代码风格 2.1 缩进与换 ...

  4. Mac安装Maven

    1.从官网(https://maven.apache.org/download.cgi)下载 Maven 并解压. 2.配置环境 .  vim ~/.bash_profile export MAVEN ...

  5. codeforces 360 B

    B - Levko and Array 题目大意:给你你个长度为n的数列a,你最多改变k个值,max{ abs ( a[ i + 1] - a[ i ] ) } 的最小值为多少. 思路:这个题很难想到 ...

  6. PHP文件包含小结

    协议 各种协议的使用有时是关键 file协议 file后面需是///,例如file:///d:/1.txt 也可以是file://e:/1.txt,如果是在当前盘则可以file:///1.txt 如果 ...

  7. [Sgu395][bzoj2363]Binary Cat Club

    一道神题…… rzO 发现立杰在初三(http://hi.baidu.com/wjbzbmr/item/4a50c7d8a8114911d78ed0a9据此可以推断)就怒A了此题…… Orz /*** ...

  8. bzoj 2665: [cqoi2012]编号

    题目中说任意两个数至少要有3个位上数不相同,那么其实也就是从7个数中选出5个这样任意的组合全部不同,用数组f[i][j][k][l][m][n]记一下就好了,i为第几种组合,一共C(7,5)种,最后爆 ...

  9. ZXing for Android 修改为竖屏模式

    zxing github连接:https://github.com/zxing/zxing 以下为修改方法 Step 1: Add following lines to rotate data bef ...

  10. List the Books

    描述 Jim is fond of reading books, and he has so many books that sometimes it's hard for him to manage ...