zoukankan      html  css  js  c++  java
  • json解析转

    在需要对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. //定义一个可变字符串数组  
    6. StringBuilder sb = new StringBuilder();  
    7. //定义一个JSON字符串str  
    8. string str = "[{ID:'1',Name:'John',Other:[{Age:'21',Sex:'0'}]},{ID:'2',Name:'Good',Other:[{Age:'36',Sex:'1'}]}]";  
    9. //反序列化JSON数据  
    10. JavaScriptArray javascript = (JavaScriptArray)JavaScriptConvert.DeserializeObject(str);  
    11. //依次读取反序列化的JSON数据,并将各数据写入可变字符串数组中  
    12. for (int i = 0; i < javascript.Count; i++)  
    13. {  
    14.     //  
    15.     JavaScriptObject obj = (JavaScriptObject)javascript[i];  
    16.     //可变字符串数组添加数据  
    17.     sb.Append("ID:" + obj["ID"].ToString());  
    18.     sb.Append("Name:" + obj["Name"].ToString());  
    19.     //反序列化JSON数据  
    20.     JavaScriptArray json = (JavaScriptArray)obj["Other"];  
    21.               
    22.     //依次读取反序列化的JSON数据,并将各数据写入可变字符串数组中  
    23.     for (int j = 0; j < json.Count; j++)  
    24.     {  
    25.         JavaScriptObject jsonobj = (JavaScriptObject)json[j];  
    26.         sb.Append("Age:" + jsonobj["Age"].ToString());  
    27.         sb.Append("Sex:" + jsonobj["Sex"].ToString());  
    28.     }  
    29. }      </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 + " ";    
    9.     
    10.     }    

             第一种方法编译直接出错,根本不识别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.    
    5.  //定义一个JSON字符串   
    6. string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";    
    7. //反序列化JSON字符串  
    8. JArray ja =(JArray) JsonConvert.DeserializeObject(jsonText);   
    9.  //将反序列化的JSON字符串转换成对象  
    10. JObject o = (JObject)ja[1];    
    11. //读取对象中的各项值  
    12. Console.WriteLine(o["a"]);    
    13. 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.   
    6. /// <summary>    
    7. ///Customer 的摘要说明    
    8. /// </summary>    
    9. public class Customer  
    10. {  
    11.     //在序列化前后没有变动    
    12.     public string a  
    13.     { getset; }  
    14.     //在序列化前后设置和重置    
    15.     public string b  
    16.     { getset; }  
    17.     //设置为null,但在序列化后填充    
    18.     public string c  
    19.     { getset; }  
    20.     public string Other  
    21.     { getset; }  
    22.     public Customer()  
    23.     {  
    24.         //    
    25.         //TODO: 在此处添加构造函数逻辑    
    26.         //    
    27.         a = "";  
    28.         b = "";  
    29.         c = "";  
    30.         Other = null;  
    31.     }  
    32. }  

         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. }   


     


  • 相关阅读:
    JavaScript 为字符串添加样式 【每日一段代码80】
    JavaScript replace()方法 【每日一段代码83】
    JavaScript for in 遍历数组 【每日一段代码89】
    JavaScript 创建用于对象的模板【每日一段代码78】
    html5 css3 新元素简单页面布局
    JavaScript Array() 数组 【每日一段代码88】
    JavaScript toUTCString() 方法 【每日一段代码86】
    位运算
    POJ 3259 Wormholes
    POJ 3169 Layout
  • 原文地址:https://www.cnblogs.com/browser/p/3362470.html
Copyright © 2011-2022 走看看