C#之Json,从Json字符串到类代码

自从.net 4.0开始,微软提供了一整套的针对json进行处理的方案。其中,就有如何把json字符串转化成C#类对象,其实这段代码很多人都清楚,大家也都认识,我就不多说,先贴代码。

1、添加引用 System.Web.Extensions

  

 

2、测试一下代码

 

static class Program

    {

        /// <summary>

        /// 程序的主入口点。

        /// </summary>

        static void Main()

        {

            string jsonStr = "{\"name\":\"supperlitt\",\"age\":25,\"likes\":[\"C#\",\"asp.net\"]}";

            JavaScriptSerializer js = new JavaScriptSerializer();

            var model = js.Deserialize<TestModel>(jsonStr);

 

            Console.WriteLine(model.name);

            Console.WriteLine(model.age);

            Console.WriteLine(string.Join(",", model.likes));

 

            Console.ReadLine();

        }

 

        public class TestModel

        {

            public string name { get; set; }

 

            public int age { get; set; }

 

            public List<string> likes { get; set; }

        }

    }

 

输出内容:

逆思考

  由于代码中,经常会遇到需要处理json字符串(抓包比较频繁)。每次遇到json字符串,大多需要解析,又要进行重复劳动,又需要定义一个C#对象类,有没有一个比较好的办法解决呢,不用每次都去写代码。自动生成多好。。。

  于是LZ思前,向后,想到了以前用过的一个微软的类库,应该是微软的一个Com库。

      

 

从json字符串自动生成C#类

     1、试着百度了一下,也尝试了几个可以使用的类。于是找到了

     如下的代码,能够解析一个json字符串,成为一个C#的对象。

1 Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
2 var m = Microsoft.JScript.Eval.JScriptEvaluate("(" + jsonStr + ")", ve);

    这里引用了,Microsoft.JScript.dll 类库。

  2、发现这个m对象,其实是一个JSObject对象,内部也可以继续进行细分,于是测试了种种,稍后会上源码。先看测试效果吧。

  我们随便在web上面找了一个json字符串来进行处理。当然json要稍稍复杂一点。

  

复制代码
  1 using System;
  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5 using Microsoft.JScript;  6  7 namespace Common  8 {  9 /// <summary>  10 /// Json字符串zhuanh  11 /// </summary>  12 public class JsonHelper : IHelper  13  {  14 /// <summary>  15 /// 是否添加get set  16 /// </summary>  17 private bool isAddGetSet = false;  18  19 /// <summary>  20 /// 数据集合,临时  21 /// </summary>  22 private List<AutoClass> dataList = new List<AutoClass>();  23  24 public JsonHelper()  25  {  26  }  27  28 public JsonHelper(bool isAddGetSet)  29  {  30 this.isAddGetSet = isAddGetSet;  31  }  32  33 /// <summary>  34 /// 获取类的字符串形式  35 /// </summary>  36 /// <param name="jsonStr"></param>  37 /// <returns></returns>  38 public string GetClassString(string jsonStr)  39  {  40 Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();  41 var m = Microsoft.JScript.Eval.JScriptEvaluate("(" + jsonStr + ")", ve);  42  43 int index = 0;  44 var result = GetDicType((JSObject)m, ref index);  45  46 StringBuilder content = new StringBuilder();  47 foreach (var item in dataList)  48  {  49 content.AppendFormat("\tpublic class {0}\r\n", item.CLassName);  50 content.AppendLine("\t{");  51 foreach (var model in item.Dic)  52  {  53 if (isAddGetSet)  54  {  55 content.AppendFormat("\t\tpublic {0} {1}", model.Value, model.Key);  56 content.Append(" { get; set; }\r\n");  57  }  58 else  59  {  60 content.AppendFormat("\t\tpublic {0} {1};\r\n", model.Value, model.Key);  61  }  62  63  content.AppendLine();  64  }  65  66 content.AppendLine("\t}");  67  content.AppendLine();  68  }  69  70 return content.ToString();  71  }  72  73 /// <summary>  74 /// 获取类型的字符串表示  75 /// </summary>  76 /// <param name="type"></param>  77 /// <returns></returns>  78 private string GetTypeString(Type type)  79  {  80 if (type == typeof(int))  81  {  82 

转载于:https://www.cnblogs.com/wyBlog117/p/4615751.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值