Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
写在开头:
最近项目需求,需要在C#中处理json字符串,毫不犹豫的下载了Newtonsoft.Json 4.5.11(2012.12.17)http://json.codeplex.com/,然后百度教程,还比较多(心喜),大致方法类似如下:
- using Newtonsoft.Json;
- using System.Text;
- StringBuilder sb = new StringBuilder();
- string str = "[{ID:'1',Name:'John',Other:[{Age:'21',Sex:'0'}]},{ID:'2',Name:'Good',Other:[{Age:'36',Sex:'1'}]}]";
- JavaScriptArray javascript = (JavaScriptArray)JavaScriptConvert.DeserializeObject(str);
- 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());
- JavaScriptArray json = (JavaScriptArray)obj["Other"];
- 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());
- }
- }
还有一种方法是:
- string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
- JsonReader reader = new JsonReader(new StringReader(jsonText));
- while (reader.Read())
- {
- textBox1.Text += "TokenType = " + reader.TokenType + " ValueType = " + reader.ValueType + " Value = " + reader.Value + "\r\n";
- }
第一种方法编译直接出错,根本不识别JavaScriptArray,JavaScriptObject,就连JavaScriptConvert方法也木有,靠!那好吧,第二种总行了吧,提示:
错误 2 无法创建抽象类或接口“Newtonsoft.Json.JsonReader”的实例
这是要闹哪样???
后面查看了Newtonsoft.Json库中的方法,根本没有嘛!再百度,终于有位仁兄说在新版中JavaScriptArray变成了JArray,顺着这个思路,发现变化如下:
- JavaScriptArray--->JArray
- JavaScriptConvert--->JsonConvert
- JavaScriptObject--->JObject
仔细看看,人家这样改更规范了嘛!
使用方法总结:
1、较简单的一种
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
- JArray ja =(JArray) JsonConvert.DeserializeObject(jsonText);
- JObject o = (JObject)ja[1];
- Console.WriteLine(o["a"]);
- Console.WriteLine(ja[1]["a"]);
2、自定义对象列表
定义一个对象:
- 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;
- }
- }
反序列化json字符串:
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
- List<Customer> _list = JsonConvert.DeserializeObject<List<Customer>>(jsonText);
- Console.WriteLine(_list[1].a);
- foreach (Customer c in _list)
- {
- Console.WriteLine(c.c);
- }
我感觉两种方法各有好处,第二种虽然需要再写一个对象,但可以像在js里面一样使用,感觉很爽!
Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串的更多相关文章
- JSON转JS对象,JS对象转JSON
一.从服务端发来的json字符串,怎么才能作为JavaScript对象(JSON对象)在web端调用呢? 1.如果使用jQuery,就很方便了,可以在ajax一系列函数中,把参数Datatype传js ...
- 用Newtonsoft将json串转为对象的方法(详解)
首先,将json串转为一个JObject对象: JObject jo = (JObject)JsonConvert.DeserializeObject(CurrentSelectedItemReq) ...
- 在.NET中使用Newtonsoft.Json转换,读取,写入的方法介绍
全局引用 using Newtonsoft.Json; using Newtonsoft.Json.Converters; //把Json字符串反序列化为对象 目标对象 = JavaScriptCon ...
- Newtonsoft.Json.dll反序列化JSON字符串的方法
1.直接反序列化JSON字符串 //引用序列化.反序列化JSON字符串用到的空间 using Newtonsoft.Json; using Newtonsoft.Json.Linq; //定义一个 ...
- .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程
JSON作为一种轻量级的数据交换格式,简单灵活,被很多系统用来数据交互,作为一名.NET开发人员,JSON.NET无疑是最好的序列化框架,支持XML和JSON序列化,高性能,免费开源,支持LINQ查询 ...
- Newtonsoft.Json.dll 反序列化JSON字符串
上一篇JSON博客<JSON入门级学习小结--JSON数据结构>中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的: 如今因为项目需求(asp.net web网站,前台向 ...
- PCB MS SQL 存储过程(CLR) 实现Json转DataTable表的方法
一.准备需转为DataTable的json字符串 原json字符串数据 [{"TechName":"ECN","TechNo":" ...
- 记录一次关于Cookie、Json中文乱码的解决方法
今天工作上遇到一个问题,需要把一个对象集合List<Model>存入一个Cookie,按照原来都封装方法存入都ok,但是到取值都时候中文会变成乱码. 首先,我们可以确认Json和Cooki ...
- jQuery中的$.extend方法来扩展JSON对象及合并,方便调用对象方法
$.extend方法可以扩展JSON对象,用一个或多个其他对象来扩展一个对象,返回被扩展的对象. 例一 合并 settings 和 options,修改并返回 settings var setting ...
随机推荐
- 运行ceph时,了解一下主要的进程。
最简单ceph.conf配置如下: [global] fsid = 798ed076--429e-9e27-0ffccd60b56e mon_initial_members = ceph-node1 ...
- (翻译)在 Xamarin 应用中使用 MongoDB
原文地址:https://blog.xamarin.com/write-apps-using-mongodb-xamarin/ 在设计应用时,最重要的决定之一就是要使用什么类型的数据库. 不久之前,这 ...
- Windows服务器学习篇:服务器连接与退出
此文是我早期在公司内部发布的一篇给予新入职程序员基础技术培训的文章,非常基础简单,现拿出来给大家分享.当然,已工作人士可直接忽略... 一.Windows服务器连接 1. 在桌面菜单中的“运行”里,输 ...
- CentOS7.5安装截图软件
一.Screenshot tool插件 这个插件直接在https://extensions.gnome.org/搜索,然后打开ON,等待安装完毕,就可以在你桌面的顶栏的右侧看到一个相机一样的小东西 缺 ...
- Java字符串易错方法总结
Java字符串易错方法总结 public String[] split(String regex) 和 public String[] split(String regex,int limit) li ...
- Attacking JavaScript Engines: A case study of JavaScriptCore and CVE-2016-4622(转)
转:http://phrack.org/papers/attacking_javascript_engines.html Title : Attacking JavaScript Engines: A ...
- CodeForces 738D Sea Battle
抽屉原理. 先统计最多有$sum$个船可以放,假设打了$sum-a$枪都没打中$a$个船中的任意一个,那么再打$1$枪必中. #pragma comment(linker, "/STACK: ...
- CAS无锁操作
https://coolshell.cn/articles/8239.html 主要讲的是<Implementing Lock-Free Queues>的论点,具体直接看论文最好.这里总结 ...
- Quartz.NET 3.0.7 + MySql 动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(四)
把 HAProxy 用上了,终于不用担心某个节点挂了,还要去手动修改管理后台配置文件的api地址了. 在某网站下载了一个 window 可以用的版本 haproxy-1.7.8 不得不吐槽一下,作者要 ...
- Mac下配置PHP支持GD库FreeType
一句话脚本 curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6 记得要FQ哦. 或者下面代码保存成.sh ,代码从http://php-os ...