亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

也談C#之Json,從Json字符串到類代碼

2019-11-17 02:17:16
字體:
來源:轉載
供稿:網友

也談C#之Json,從Json字符串到類代碼

閱讀目錄

  1. json轉類對象
  2. 逆思考
  3. 從json字符串自動生成C#類

  


json轉類對象

  自從.net 4.0開始,微軟提供了一整套的針對json進行處理的方案。其中,就有如何把json字符串轉化成C#類對象,其實這段代碼很多人都清楚,大家也都認識,我就不多說,先貼代碼。

1、添加引用System.Web.Extensions

2、測試一下代碼

 1 static class PRogram 2     { 3         /// <summary> 4         /// 程序的主入口點。 5         /// </summary> 6         static void Main() 7         { 8             string jsonStr = "{/"name/":/"supperlitt/",/"age/":25,/"likes/":[/"C#/",/"asp.net/"]}"; 9             javaScriptSerializer js = new JavascriptSerializer();10             var model = js.Deserialize<TestModel>(jsonStr);11 12             Console.WriteLine(model.name);13             Console.WriteLine(model.age);14             Console.WriteLine(string.Join(",", model.likes));15 16             Console.ReadLine();17         }18 19         public class TestModel20         {21             public string name { get; set; }22 23             public int age { get; set; }24 25             public List<string> likes { get; set; }26         }27     }

輸出內容:

逆思考

  由于代碼中,經常會遇到需要處理json字符串(抓包比較頻繁)。每次遇到json字符串,大多需要解析,又要進行重復勞動,又需要定義一個C#對象類,有沒有一個比較好的辦法解決呢,不用每次都去寫代碼。自動生成多好。。。

  于是LZ思前,向后,想到了以前用過的一個微軟的類庫,應該是微軟的一個Com庫。

從json字符串自動生成C#類

1、試著百度了一下,也嘗試了幾個可以使用的類。于是找到了

如下的代碼,能夠解析一個json字符串,成為一個C#的對象。

這里引用了,Microsoft.JScript.dll 類庫。

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

2、發現這個m對象,其實是一個JSObject對象,內部也可以繼續進行細分,于是測試了種種,稍后會上源碼。先看測試效果吧。

  我們隨便在web上面找了一個json字符串來進行處理。當然json要稍稍復雜一點。

ps:代碼如下

  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                 return "int"; 83             } 84             else if (type == typeof(bool)) 85             { 86                 return "bool"; 87             } 88             else if (type == typeof(Int64)) 89             { 90                 return "long"; 91             } 92             else if (type == typeof(string)) 93             { 94                 return "string"; 95             } 96             else if (type == typeof(List<string>)) 97             { 98                 return "List<string>"; 99             }100             else if (type == typeof(List<int>))101             {102                 return "List<int>";103             }104             else105             {106                 return "string";107             }108         }109 110         /// <summary>111         /// 獲取字典類型112         /// </summary>113         /// <returns></returns>114         private string GetDicType(JSObject jsObj, ref int index)115         {116             AutoClass classInfo = new AutoClass();117 118             var model = ((Microsoft.JScript.JSObject)(jsObj)).GetMembers(System.Reflection.BindingFlags.GetField);119             foreach (Microsoft.JScript.JSField item in model)120             {121                 string name = item.Name;122                 Type type = item.GetValue(item).GetType();123                 if (type == typeof(ArrayObject))124                 {125                     // 集合126                     string typeName = GetDicListType((ArrayObject)item.GetValue(item), ref index);127                     if (!string.IsNullOrEmpty(typeName))128                     {129                         classInfo.Dic.Add(name, typeName);130                     }131                 }132                 else if (type == typeof(JSObject))133                 {134                     // 單個對象135                     string typeName = GetDicType((JSObject)item.GetValue(item), ref index);136                     if (!string.IsNullOrEmpty(typeName))137                     {138                         classInfo.Dic.Add(name, typeName);139                     }140                 }141                 else142                 {143                     classInfo.Dic.Add(name, GetTypeString(type));144                 }145             }146 147             index++;148             classInfo.CLassName = "Class" + index;149             dataList.Add(classInfo);150             return classInfo.CLassName;151         }152 153         /// <summary>154         /// 讀取集合類型155         /// </summary>156         /// <param name="jsArray"></param>157         /// <param name="index"></param>158         /// <returns></returns>159         private string GetDicListType(ArrayObject jsArray, ref int index)160         {161             string name = string.Empty;162             if ((int)jsArray.length > 0)163             {164
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产在线| 久久激情视频久久| 中文字幕日韩在线播放| 97国产suv精品一区二区62| 欧美人交a欧美精品| 97精品久久久| 色偷偷噜噜噜亚洲男人的天堂| 欧美性视频在线| 91网在线免费观看| 国外成人免费在线播放| 91大神福利视频在线| 成人免费直播live| 国产精品久久久久久久久久久新郎| 亚洲石原莉奈一区二区在线观看| 国内精品美女av在线播放| 国产精品美女久久久久久免费| 亚洲精品欧美日韩专区| 日韩欧美亚洲一二三区| 都市激情亚洲色图| 欧美成人午夜激情在线| 国产精品一区二区三区成人| 亚洲欧洲日产国码av系列天堂| 日韩成人中文字幕在线观看| 国产精品成人观看视频国产奇米| 91av国产在线| 国产欧美日韩免费看aⅴ视频| 欧美高清电影在线看| 久久国产一区二区三区| 久久亚洲一区二区三区四区五区高| 精品亚洲国产成av人片传媒| 成人在线精品视频| 日本成人免费在线| 国产一级揄自揄精品视频| 色悠悠国产精品| 91免费看视频.| 亚洲国产精品va在线看黑人动漫| 国产精品视频在线播放| 综合国产在线视频| 欧美性猛交xxxx乱大交极品| 色视频www在线播放国产成人| 精品毛片网大全| 成人妇女免费播放久久久| 欧美日韩中文字幕综合视频| 91久久精品视频| 国产成人精品网站| 久久久久久久激情视频| 国产视频精品在线| 国产精品无码专区在线观看| 欧美日韩在线视频一区二区| 欧美黑人xxxⅹ高潮交| 国产小视频91| 久久久精品免费视频| 欧美大肥婆大肥bbbbb| 亚洲日本欧美日韩高观看| 国产福利精品av综合导导航| 欧美一区二区大胆人体摄影专业网站| 国产日韩精品视频| 欧美日韩国产中文精品字幕自在自线| 国产精品扒开腿做爽爽爽视频| 成人国产精品免费视频| 日韩a**站在线观看| 色播久久人人爽人人爽人人片视av| 久久久久在线观看| 久久香蕉国产线看观看av| 亚洲国产中文字幕在线观看| 国产亚洲综合久久| 欧美激情一级欧美精品| 国产香蕉精品视频一区二区三区| 性欧美办公室18xxxxhd| 性色av一区二区三区在线观看| 一本色道久久88综合日韩精品| 欧美性xxxx极品hd满灌| 中文字幕国产日韩| 亚洲色图美腿丝袜| 久久久精品在线观看| 国产美女久久久| 午夜精品久久久久久久99热| 久久久国产在线视频| 欧美午夜精品久久久久久浪潮| 久久人人爽人人爽人人片亚洲| 国产一区二区三区三区在线观看| 欧美激情喷水视频| 视频一区视频二区国产精品| 国产一区二中文字幕在线看| 国产区亚洲区欧美区| 91国产中文字幕| 亚洲国产欧美精品| 国产一区深夜福利| 国产精品视频不卡| 欧美大片网站在线观看| 欧美乱人伦中文字幕在线| 欧美日韩成人免费| 国产日韩视频在线观看| 国产午夜精品一区二区三区| 国产精品永久免费观看| 欧美日韩中文字幕在线视频| 久久久久久久国产精品视频| 91免费看片网站| 日韩av观看网址| 精品成人国产在线观看男人呻吟| 国产亚洲精品综合一区91| 色老头一区二区三区在线观看| 亚洲热线99精品视频| 欧美成人免费va影院高清| www.欧美精品| 日韩极品精品视频免费观看| 国产精品免费看久久久香蕉| 亚洲精品久久久久久久久久久久| 蜜臀久久99精品久久久久久宅男| 91免费看视频.| 一本色道久久88综合亚洲精品ⅰ| 精品国产自在精品国产浪潮| 欧美高清在线观看| 欧美专区在线播放| 亚洲欧美日韩精品久久奇米色影视| 国内精品久久久久久久久| 午夜剧场成人观在线视频免费观看| 成人av在线天堂| 欧美精品久久久久久久久| 欧美尺度大的性做爰视频| 亚洲国产福利在线| 欧美日韩国产页| 人人做人人澡人人爽欧美| 国产成人精品999| 91久久久久久久久久久| 欧美激情一区二区三区久久久| 国产精品自产拍在线观看| 69久久夜色精品国产69| 亚洲第一福利在线观看| 国内精品久久久久伊人av| 最好看的2019年中文视频| 中文字幕成人精品久久不卡| 中文字幕不卡av| 精品无人区太爽高潮在线播放| 91夜夜揉人人捏人人添红杏| 日韩电影免费在线观看| 欧美理论在线观看| 中文字幕在线日韩| 色先锋久久影院av| 97超级碰碰碰久久久| 欧美高清激情视频| 国产精品视频网址| 欧美大胆在线视频| 成人av番号网| 亚洲国产日韩欧美在线动漫| 91青草视频久久| 永久免费精品影视网站| 91精品国产91久久久久久不卡| 国产一区二区三区三区在线观看| 国产精品www色诱视频| 国产精品电影久久久久电影网| 欧美日韩一区免费| 91在线精品播放| 国产精品电影在线观看| 精品国产一区二区三区久久| 国产精品久久久久久久久| 国产精品视频一区二区三区四| 精品香蕉一区二区三区| 亚洲成人激情在线| 欧美激情精品久久久久久| 欧美性资源免费| 成人淫片在线看| 国产精品国产三级国产aⅴ浪潮| 超碰精品一区二区三区乱码|