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


     


  • 相关阅读:
    win10远程桌面连接提示身份验证错误,要求的函数不受支持的解决方案
    十六进制转八进制
    十六进制转十进制
    十进制转十六进制
    LEETCODE
    LINUX
    LINUX
    LEETCODE
    LEETCODE
    LEETCODE
  • 原文地址:https://www.cnblogs.com/browser/p/3362470.html
Copyright © 2020-2023  润新知