加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C#Json解析简单粗暴易懂

(2018-08-23 08:27:37)
分类: 知识类
https://blog.csdn.net/jjl1991_11/article/details/80107820

在看到这篇博文之前,我对Json的理解没有这么明了,只知道是要专程对象来操作.......

当我看到这篇博文的时候,我感谢上帝让我最近比较空闲可以有时间来梳理一下快被遗忘的技术知识点

真的超级暴力,超级简单  请往下看

PS:网络上还有各种各样的方法大家可以自行探究,不过我敢说肯定没有本文讲的清晰。。几句话就解决的事绕来绕去的说。。

(完整代码在文末,引用库文件后可直接运行~)

需求:

假设有如下json字符串:

{
    "companyID": "15",

    "employees": [
        {
            "firstName": "Bill",
            "lastName": "Gates"
        },
        {
            "firstName": "George",
            "lastName": "Bush"
        }
    ],

    "manager": [
        {
            "salary": "6000",
            "age": "23"
        },
        {
            "salary": "8000",
            "age": "26"
        }
    ]

}

请利用C#处理这个字符串,在控制台显示出公司的ID,第一位员工的姓,和所有管理者的工资。

解决步骤:

(为了更清晰的说明,本例在控制台中测试,本人编程环境VS2015)

1、下载开源的类库Newtonsoft.Json(下载地址 http://json.codeplex.com/ )。

2、在VS中新建项目——控制台应用程序。

3、引用类库:在VS中点击:项目——引用——浏览——找到你刚才下载的Newtonsoft.Json.dll——确定。

4、在主程序Program.cs的开头添加 using Newtonsoft.Json;  这一语句。

5、把要处理的json字符串复制到 http://json2csharp.chahuo.com/  得到C#类,如图所示:

http://images2017.cnblogs.com/blog/1111831/201708/1111831-20170817130540006-1838140740.png

把这部分内容复制,粘贴到class Program类的下方。

6、为了方便演示,把我给的json字符串赋值给一个变量。但是json中有很多的引号,赋值给一个string变量还要加上很多的反斜杠。这里再给大家一个在线工具:http://tool.chinaz.com/tools/jsonescape.aspx

将我刚才给的东西复制进去点击“压缩并转义”,得到的值可以直接赋值给一个string变量,如图:

http://images2017.cnblogs.com/blog/1111831/201708/1111831-20170817131223396-1034319951.png

PS:如果能从别的地方比如webAPI得到json字符串那更好,直接赋值给一个string变量后进行下面的操作,省去了转义这一步。

[csharp] view plain copy
  1. string jsonText {\"companyID\":\"15\",\"employees\":[{\"firstName\":\"Bill\",\"lastName\":\"Gates\"},{\"firstName\":\"George\",\"lastName\":\"Bush\"}],\"manager\":[{\"salary\":\"6000\",\"age\":\"23\"},{\"salary\":\"8000\",\"age\":\"26\"}]}  " 

7、反序列化json字符串得到对象。

RootObject rb = JsonConvert.DeserializeObject(jsonText);

8、处理对象,如输出公司ID:

Console.WriteLine(rb.companyID);

 

完整代码如下(引用NewtonSoft.Json.dll后可直接运行):

[csharp] view plain copy
  1. using Newtonsoft.Json;  
  2. using System;  
  3. using System.Collections.Generic;  
  4. using System.Linq;  
  5. using System.Text;  
  6. using System.Threading.Tasks;  
  7.   
  8. namespace ConsoleJsonTest  
  9.  
  10.     class Program  
  11.      
  12.         static void Main(string[] args)  
  13.          
  14.   
  15.             string jsonText {\"companyID\":\"15\",\"employees\":[{\"firstName\":\"Bill\",\"lastName\":\"Gates\"},{\"firstName\":\"George\",\"lastName\":\"Bush\"}],\"manager\":[{\"salary\":\"6000\",\"age\":\"23\"},{\"salary\":\"8000\",\"age\":\"26\"}]} " 
  16.             Console.WriteLine(jsonText);  
  17.   
  18.             RootObject rb JsonConvert.DeserializeObject(jsonText);  
  19.   
  20.             Console.WriteLine(rb.companyID);  
  21.   
  22.             Console.WriteLine(rb.employees[0].firstName);  
  23.   
  24.             foreach (Manager ep in rb.manager)  
  25.              
  26.                 Console.WriteLine(ep.age);  
  27.              
  28.   
  29.             Console.ReadKey();  
  30.          
  31.      
  32.   
  33.     public class Employees  
  34.      
  35.         public string firstName getset 
  36.         public string lastName getset 
  37.      
  38.   
  39.     public class Manager  
  40.      
  41.         public string salary getset 
  42.         public string age getset 
  43.      
  44.   
  45.     public class RootObject  
  46.      
  47.         public string companyID getset 
  48.         public List employees getset 
  49.         public List manager getset 
  50.      
  51.  

输出结果:

http://images2017.cnblogs.com/blog/1111831/201708/1111831-20170817131920709-1699440188.png

 

说明:对 于json字符串中的数组,如本例中的employees或者manager,用这篇文章里的在线工具会自动生成泛型列表List。关 于泛型列表的有关内容在这篇文章里就不再赘述了,大家可以直接把它当成数组使用。遍历数组的方法在此依然适用,例如代码中的:

foreach (Manager ep in rb.manager)
 {
            Console.WriteLine(ep.age);
 }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有