上一篇JSON博客《JSON入门级学习小结--JSON数据结构》中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的:

如今因为项目需求(asp.net web网站,前台向后台传递JSON数据,并对JSON数据处理,详述见博客《

《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

》),需要对传递的JSON数据反序列化。于是从网上找了许多JSON反序列化的例子,最终决定使用Newtonsoft.Json.dll 反序列化JSON字符串,当然它也可以序列化JSON字符串,Newtonsoft.Json.dll下载链接

使用Newtonsoft.Json.dll反序列化JSON字符串的步骤:

 1.对Newtonsoft.Json.dll添加引用

将Newtonsoft.Json.dll文件拷贝至界面层的Bin目录下,然后右击Bin,弹出“添加引用”页,然后点击“浏览”,然后找到界面层的Bin文件夹,找到Newtonsoft.Json.dll文件,然后点击"添加",引用添加成功!

 

2.在需要对JSON字符串处理的界面,引用JSON空间,并对JSON进行处理

网上解决办法大致如下:

方法1:

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;">//引用JSON解析使用的空间
  2. using Newtonsoft.Json;
  3. using System.Text;
  4. //定义一个可变字符串数组
  5. StringBuilder sb = new StringBuilder();
  6. //定义一个JSON字符串str
  7. string str = "[{ID:'1',Name:'John',Other:[{Age:'21',Sex:'0'}]},{ID:'2',Name:'Good',Other:[{Age:'36',Sex:'1'}]}]";
  8. //反序列化JSON数据
  9. JavaScriptArray javascript = (JavaScriptArray)JavaScriptConvert.DeserializeObject(str);
  10. //依次读取反序列化的JSON数据,并将各数据写入可变字符串数组中
  11. for (int i = 0; i < javascript.Count; i++)
  12. {
  13. //
  14. JavaScriptObject obj = (JavaScriptObject)javascript[i];
  15. //可变字符串数组添加数据
  16. sb.Append("ID:" + obj["ID"].ToString());
  17. sb.Append("Name:" + obj["Name"].ToString());
  18. //反序列化JSON数据
  19. JavaScriptArray json = (JavaScriptArray)obj["Other"];
  20. //依次读取反序列化的JSON数据,并将各数据写入可变字符串数组中
  21. for (int j = 0; j < json.Count; j++)
  22. {
  23. JavaScriptObject jsonobj = (JavaScriptObject)json[j];
  24. sb.Append("Age:" + jsonobj["Age"].ToString());
  25. sb.Append("Sex:" + jsonobj["Sex"].ToString());
  26. }
  27. }      </span>

还有一种方法是:

  1. //定义一个JSON字符串str
  2. string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
  3. //反序列化JSON数据
  4. JsonReader reader = new JsonReader(new StringReader(jsonText));
  5. //依次读取反序列化的JSON数据
  6. while (reader.Read())
  7. {
  8. textBox1.Text += "TokenType = " + reader.TokenType + "   ValueType =  " + reader.ValueType + "   Value = " + reader.Value + "\r\n";
  9. }

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

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

这是怎么回事???

后来在搜到的文章中,发现新版中JavaScriptArray变成了JArray,顺着这个思路,发现变化如下:

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;">JavaScriptArray--->JArray
  2. JavaScriptConvert--->JsonConvert
  3. JavaScriptObject--->JObject</span>

其实这样更改更规范吧!

下面介绍新版本Newtonsoft.Json.dll反序列化JSON字符串的方法

  1.直接反序列化JSON字符串

  1. //引用序列化、反序列化JSON字符串用到的空间
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. //定义一个JSON字符串
  5. string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
  6. //反序列化JSON字符串
  7. JArray ja =(JArray) JsonConvert.DeserializeObject(jsonText);
  8. //将反序列化的JSON字符串转换成对象
  9. JObject o = (JObject)ja[1];
  10. //读取对象中的各项值
  11. Console.WriteLine(o["a"]);
  12. Console.WriteLine(ja[1]["a"]);

2.定义对象列表,然后反序列化JSON字符串

2.1 添加一个类,定义一个对象

  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
  12. { get; set; }
  13. //在序列化前后设置和重置
  14. public string b
  15. { get; set; }
  16. //设置为null,但在序列化后填充
  17. public string c
  18. { get; set; }
  19. public string Other
  20. { get; set; }
  21. public Customer()
  22. {
  23. //
  24. //TODO: 在此处添加构造函数逻辑
  25. //
  26. a = "";
  27. b = "";
  28. c = "";
  29. Other = null;
  30. }
  31. }

2.2 反序列化JSON字符串

  1. //引用序列化、反序列化JSON字符串用到的空间
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. //定义一个JSON字符串
  5. string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
  6. //反序列化JSON字符串,将JSON字符串转换成LIST列表
  7. List<Customer> _list = JsonConvert.DeserializeObject<List<Customer>>(jsonText);
  8. //读取列表中的值
  9. Console.WriteLine(_list[1].a);
  10. foreach (Customer c in _list)
  11. {
  12. Console.WriteLine(c.c);
  13. }

我感觉这两种反序列化JSON的方法都挺好,其实还用很多方式可以反序列化JSON,本文仅仅借助了Newtonsoft.Json.dll这个工具!

Newtonsoft.Json.dll 反序列化JSON字符串的更多相关文章

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

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

  2. C#应用Newtonsoft.Json.dll,控制json的时间格式

    原文:C#应用Newtonsoft.Json.dll,控制json的时间格式 var aIsoDateTimeConverter = new IsoDateTimeConverter();aIsoDa ...

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

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

  4. Newtonsoft.Json.dll解析json的dll文件使用

    要解析的json //解析前 //解析前 {,,,,,,,,,,},,,,,,,,,,,},,,,,,,,,,,,,,,,},,,,,,,,,},,,,,,,,,,,,},,,,,,,,,,,},,, ...

  5. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)

    在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...

  6. DataTable转Json字符串(使用Newtonsoft.Json.dll)

    DataTable转Json字符串(使用Newtonsoft.Json.dll) 在需要把DataTable转为Json字符串时,自己手动拼接太麻烦,而且容易出错,费时费力,使用Newtonsoft. ...

  7. Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串

    写在开头: 最近项目需求,需要在C#中处理json字符串,毫不犹豫的下载了Newtonsoft.Json 4.5.11(2012.12.17)http://json.codeplex.com/,然后百 ...

  8. C# Json 序列化和反序列化 工具类 Newtonsoft.Json.dll

    引用: Newtonsoft.Json.dll // 引用: using Newtonsoft.Json; using Newtonsoft.Json.Converters; // 定义 实体测试类 ...

  9. WCF JSON DATETIME JSON.NET (Newtonsoft.Json.dll)

    [DataMember] public DateTime? myTime { get; set; } var timeFormat = new JsonSerializerSettings() { D ...

随机推荐

  1. Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路

     Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路 先看一看我的代码运行结果. 代码运行起来初始化状态: 点击开始按钮,唱片机的机械臂匀速接近唱片磁盘,同时唱片磁盘也 ...

  2. javascript、jquery 、C#、sqlserveer、mysql、oracle中字符串截取的区别和用法

    下标从0开始 ,并且包括起始位 javascript 中字符串截取 : substring(Number start,Number end) var substr = "liuguangfa ...

  3. HDU 4499

    题目大意: N*M的棋盘上摆了一些棋子,在剩余位置上尽可能多的摆上炮,使所有炮不能互吃 dfs+回溯 #include <iostream> #include <cstdio> ...

  4. ZOJ 2588 求割边问题

    题目链接:http://vjudge.net/problem/viewProblem.action?id=14877 题目大意: 要尽可能多的烧毁桥,另外还要保证图的连通性,问哪些桥是绝对不能烧毁的 ...

  5. FastDfs + Dht 搭建笔记

    以下为搭建一套分布式文件集群系统,参考了很多资料,自己经过在服务器上搭建并且经过了测试.记录以方便以后使用查看. FastDfs + Dht 安装手册 一:概述 FastDFS是由淘宝的余庆先生所开发 ...

  6. Python数据分析常用的库总结

    Python之所以能够成为数据分析与挖掘领域的最佳语言,是有其独特的优势的.因为他有很多这个领域相关的库可以用,而且很好用,比如Numpy.SciPy.Matploglib.Pandas.Scikit ...

  7. 一个动态链接的问题,dlsym后符号调用主函数的符号报告无法找到

    先看看状况(小心头疼) client.c 编译得到 client:在 client 的 main 中用 dlopen( "./liba.so", RTLD_LAZY|RTLD_GL ...

  8. intelliJ IDEA工具快捷键

    F9            resume programe 恢复程序 Alt+F10        show execution point 显示执行断点 F8            Step Ove ...

  9. (转)Delphi2009初体验 - 语言篇 - 智能指针(Smart Pointer)的实现

     转载:http://www.cnblogs.com/felixYeou/archive/2008/08/27/1277250.html 快速导航 一. 回顾历史二. 智能指针简介三. Delphi中 ...

  10. Eclipse中git插件导入远程库和上传项目源代码到远程库

    陆陆续续,从github,csdn的code.之前实习的小公司也是用git管理.发如今版本号控制方面确实比較方便.代码一敲完 . 自己由于完毕了新功能.加入一个新分支.然后提交上去,这就是程序猿一天干 ...