Newtonsoft.Json.4.5.11使用方法总结

写在开头:

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

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—>JArrayJavaScriptConvert—>JsonConvertJavaScriptObject—>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里面一样使用,感觉很爽!

作者:kunoy

出处:

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

不然你大概会一直好奇和不甘吧——家门前的那条小路,

Newtonsoft.Json.4.5.11使用方法总结

相关文章:

你感兴趣的文章:

标签云: