Newtonsoft.Json.dll 反序列化JSON字符串
上一篇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:
- <span style="font-family:KaiTi_GB2312;font-size:18px;">//引用JSON解析使用的空间
- using Newtonsoft.Json;
- using System.Text;
- //定义一个可变字符串数组
- StringBuilder sb = new StringBuilder();
- //定义一个JSON字符串str
- string str = "[{ID:'1',Name:'John',Other:[{Age:'21',Sex:'0'}]},{ID:'2',Name:'Good',Other:[{Age:'36',Sex:'1'}]}]";
- //反序列化JSON数据
- JavaScriptArray javascript = (JavaScriptArray)JavaScriptConvert.DeserializeObject(str);
- //依次读取反序列化的JSON数据,并将各数据写入可变字符串数组中
- for (int i = 0; i < javascript.Count; i++)
- {
- //
- JavaScriptObject obj = (JavaScriptObject)javascript[i];
- //可变字符串数组添加数据
- sb.Append("ID:" + obj["ID"].ToString());
- sb.Append("Name:" + obj["Name"].ToString());
- //反序列化JSON数据
- JavaScriptArray json = (JavaScriptArray)obj["Other"];
- //依次读取反序列化的JSON数据,并将各数据写入可变字符串数组中
- for (int j = 0; j < json.Count; j++)
- {
- JavaScriptObject jsonobj = (JavaScriptObject)json[j];
- sb.Append("Age:" + jsonobj["Age"].ToString());
- sb.Append("Sex:" + jsonobj["Sex"].ToString());
- }
- } </span>
还有一种方法是:
- //定义一个JSON字符串str
- string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
- //反序列化JSON数据
- JsonReader reader = new JsonReader(new StringReader(jsonText));
- //依次读取反序列化的JSON数据
- while (reader.Read())
- {
- textBox1.Text += "TokenType = " + reader.TokenType + " ValueType = " + reader.ValueType + " Value = " + reader.Value + "\r\n";
- }
第一种方法编译直接出错,根本不识别JavaScriptArray,JavaScriptObject,就连JavaScriptConvert方法也木有!那好吧,第二种总行了吧,提示:
错误 2 无法创建抽象类或接口“Newtonsoft.Json.JsonReader”的实例
这是怎么回事???
后来在搜到的文章中,发现新版中JavaScriptArray变成了JArray,顺着这个思路,发现变化如下:
- <span style="font-family:KaiTi_GB2312;font-size:18px;">JavaScriptArray--->JArray
- JavaScriptConvert--->JsonConvert
- JavaScriptObject--->JObject</span>
其实这样更改更规范吧!
下面介绍新版本Newtonsoft.Json.dll反序列化JSON字符串的方法
1.直接反序列化JSON字符串
- //引用序列化、反序列化JSON字符串用到的空间
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- //定义一个JSON字符串
- string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
- //反序列化JSON字符串
- JArray ja =(JArray) JsonConvert.DeserializeObject(jsonText);
- //将反序列化的JSON字符串转换成对象
- JObject o = (JObject)ja[1];
- //读取对象中的各项值
- Console.WriteLine(o["a"]);
- Console.WriteLine(ja[1]["a"]);
2.定义对象列表,然后反序列化JSON字符串
2.1 添加一个类,定义一个对象
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- /// <summary>
- ///Customer 的摘要说明
- /// </summary>
- public class Customer
- {
- //在序列化前后没有变动
- public string a
- { get; set; }
- //在序列化前后设置和重置
- public string b
- { get; set; }
- //设置为null,但在序列化后填充
- public string c
- { get; set; }
- public string Other
- { get; set; }
- public Customer()
- {
- //
- //TODO: 在此处添加构造函数逻辑
- //
- a = "";
- b = "";
- c = "";
- Other = null;
- }
- }
2.2 反序列化JSON字符串
- //引用序列化、反序列化JSON字符串用到的空间
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- //定义一个JSON字符串
- string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
- //反序列化JSON字符串,将JSON字符串转换成LIST列表
- List<Customer> _list = JsonConvert.DeserializeObject<List<Customer>>(jsonText);
- //读取列表中的值
- Console.WriteLine(_list[1].a);
- foreach (Customer c in _list)
- {
- Console.WriteLine(c.c);
- }
我感觉这两种反序列化JSON的方法都挺好,其实还用很多方式可以反序列化JSON,本文仅仅借助了Newtonsoft.Json.dll这个工具!
Newtonsoft.Json.dll 反序列化JSON字符串的更多相关文章
- Newtonsoft.Json.dll反序列化JSON字符串的方法
1.直接反序列化JSON字符串 //引用序列化.反序列化JSON字符串用到的空间 using Newtonsoft.Json; using Newtonsoft.Json.Linq; //定义一个 ...
- C#应用Newtonsoft.Json.dll,控制json的时间格式
原文:C#应用Newtonsoft.Json.dll,控制json的时间格式 var aIsoDateTimeConverter = new IsoDateTimeConverter();aIsoDa ...
- .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程
JSON作为一种轻量级的数据交换格式,简单灵活,被很多系统用来数据交互,作为一名.NET开发人员,JSON.NET无疑是最好的序列化框架,支持XML和JSON序列化,高性能,免费开源,支持LINQ查询 ...
- Newtonsoft.Json.dll解析json的dll文件使用
要解析的json //解析前 //解析前 {,,,,,,,,,,},,,,,,,,,,,},,,,,,,,,,,,,,,,},,,,,,,,,},,,,,,,,,,,,},,,,,,,,,,,},,, ...
- 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)
在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...
- DataTable转Json字符串(使用Newtonsoft.Json.dll)
DataTable转Json字符串(使用Newtonsoft.Json.dll) 在需要把DataTable转为Json字符串时,自己手动拼接太麻烦,而且容易出错,费时费力,使用Newtonsoft. ...
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
写在开头: 最近项目需求,需要在C#中处理json字符串,毫不犹豫的下载了Newtonsoft.Json 4.5.11(2012.12.17)http://json.codeplex.com/,然后百 ...
- C# Json 序列化和反序列化 工具类 Newtonsoft.Json.dll
引用: Newtonsoft.Json.dll // 引用: using Newtonsoft.Json; using Newtonsoft.Json.Converters; // 定义 实体测试类 ...
- WCF JSON DATETIME JSON.NET (Newtonsoft.Json.dll)
[DataMember] public DateTime? myTime { get; set; } var timeFormat = new JsonSerializerSettings() { D ...
随机推荐
- 79. could not initialize proxy - no Session 【从零开始学Spring Boot】
[原创文章,转载请注明出处] Spring与JPA结合时,如何解决懒加载no session or session was closed!!! 实际上Spring Boot是默认是打开支持sessio ...
- captcha库报错"OSError: cannot open resource"
问题描述 在win平台上python虚拟环境下使用captcha库生成验证码报错OSError: cannot open resource 代码 from captcha.image import I ...
- 2016 Multi-University Training Contest 8 solutions BY 学军中学
1001: 假设有4个红球,初始时从左到右标为1,2,3,4.那么肯定存在一种方案,使得最后结束时红球的顺序没有改变,也是1,2,3,4. 那么就可以把同色球都写成若干个不同色球了.所以现在共有n个颜 ...
- ibatis中的xml配置文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMap PUBLIC "-/ ...
- java学习——关于java课件上动手动脑问题简单的分析
问题一:关于以下的代码为什么会产生错误的问题的简单分析. 第一个动手动脑提供了一下的代码,可以发现,在Foo的这个类中只定义了一个Foo(int)类型的构造函数,在之前的学习工程中,我们并没有接触到j ...
- 转 从头到尾彻底解析Hash表算法
出处:http://blog.csdn.net/v_JULY_v. 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解:第二部分为关于Hash表算法的详细阐述:第三部 ...
- 基于GDAL的栅格图像空间插值预处理
转自 基于GDAL的栅格图像空间插值预处理——C语言版 基于GDAL的栅格图像预处理 前言 栅格数据和矢量数据构成空间数据的主要来源,怎样以开源方式读取并处理这些空间数据?目前有多种开源支持包,这里只 ...
- Dialog集合
点击查看原文 demo下载地址http://download.csdn.net/detail/metis100/8498401 安卓开发一年.開始想整理些资料成库,以备日后高速开发. 第一天,整理了经 ...
- 单点登录cas常见问题(二) - 子系统是否会频繁訪问cas中心?
这个问题的完整描写叙述是:用户成功登陆后.在訪问子系统的受限资源时,还须要訪问cas中心么,即子系统是否还会频繁訪问cas中心.cas中心会不会压力太大? 答案是:不会. 假设用户通过子系统A登录了c ...
- leetCode 78.Subsets (子集) 解题思路和方法
Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset must ...