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

Newtonsoft.Json.4.5.11使用方法总结—反序列化json字符串写在开头:      最近项目需求,需要在C#中处理json字符串,毫不犹豫的下载了Newtonsoft.Json4.5.11(2012.12.17)http://json.codeplex.com/,然后百度教程,还比较多(心喜),大致方法类似如下:[csharp] viewplaincopyusing Newtonsoft.Json

大家好,欢迎来到IT知识分享网。Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串

Newtonsoft.Json 4.5.11(2012.12.17)http://json.codeplex.com/大致方法类似如下:

[csharp] 
view plain
copy

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

      还有一种方法是:

[csharp] 
view plain
copy

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

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

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

       这是要闹哪样???

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

[csharp] 
view plain
copy

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

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

使用方法总结:

        1、较简单的一种

[csharp] 
view plain
copy

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

        2、自定义对象列表

        定义一个对象:

[csharp] 
view plain
copy

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

         反序列化json字符串:

[csharp] 
view plain
copy

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

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

作者:
kunoy

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/16142.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信