中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-12-03 10:33:21 來源:億速云 閱讀:895 作者:iii 欄目:編程語言

這篇文章主要講解了“怎么從json字符串自動生成C#類”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么從json字符串自動生成C#類”吧!

json轉類對象

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

1、添加引用 System.Web.Extensions

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

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字符串自動生成C#類

逆思考

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

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

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

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

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

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

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

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

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

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

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

ps:代碼如下

using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.JScript;  namespace Common {     /// <summary>     /// Json字符串zhuanh     /// </summary>     public class JsonHelper : IHelper     {         /// <summary>         /// 是否添加get set         /// </summary>         private bool isAddGetSet = false;          /// <summary>         /// 數據集合,臨時         /// </summary>         private List<AutoClass> dataList = new List<AutoClass>();          public JsonHelper()         {         }          public JsonHelper(bool isAddGetSet)         {             this.isAddGetSet = isAddGetSet;         }          /// <summary>         /// 獲取類的字符串形式         /// </summary>         /// <param name="jsonStr"></param>         /// <returns></returns>         public string GetClassString(string jsonStr)         {             Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();             var m = Microsoft.JScript.Eval.JScriptEvaluate("(" + jsonStr + ")", ve);              int index = 0;             var result = GetDicType((JSObject)m, ref index);              StringBuilder content = new StringBuilder();             foreach (var item in dataList)             {                 content.AppendFormat("\tpublic class {0}\r\n", item.CLassName);                 content.AppendLine("\t{");                 foreach (var model in item.Dic)                 {                     if (isAddGetSet)                     {                         content.AppendFormat("\t\tpublic {0} {1}", model.Value, model.Key);                         content.Append(" { get; set; }\r\n");                     }                     else                     {                         content.AppendFormat("\t\tpublic {0} {1};\r\n", model.Value, model.Key);                     }                      content.AppendLine();                 }                  content.AppendLine("\t}");                 content.AppendLine();             }              return content.ToString();         }          /// <summary>         /// 獲取類型的字符串表示         /// </summary>         /// <param name="type"></param>         /// <returns></returns>         private string GetTypeString(Type type)         {             if (type == typeof(int))             {                 return "int";             }             else if (type == typeof(bool))             {                 return "bool";             }             else if (type == typeof(Int64))             {                 return "long";             }             else if (type == typeof(string))             {                 return "string";             }             else if (type == typeof(List<string>))             {                 return "List<string>";             }             else if (type == typeof(List<int>))             {                 return "List<int>";             }             else             {                 return "string";             }         }          /// <summary>         /// 獲取字典類型         /// </summary>         /// <returns></returns>         private string GetDicType(JSObject jsObj, ref int index)         {             AutoClass classInfo = new AutoClass();              var model = ((Microsoft.JScript.JSObject)(jsObj)).GetMembers(System.Reflection.BindingFlags.GetField);             foreach (Microsoft.JScript.JSField item in model)             {                 string name = item.Name;                 Type type = item.GetValue(item).GetType();                 if (type == typeof(ArrayObject))                 {                     // 集合                     string typeName = GetDicListType((ArrayObject)item.GetValue(item), ref index);                     if (!string.IsNullOrEmpty(typeName))                     {                         classInfo.Dic.Add(name, typeName);                     }                 }                 else if (type == typeof(JSObject))                 {                     // 單個對象                     string typeName = GetDicType((JSObject)item.GetValue(item), ref index);                     if (!string.IsNullOrEmpty(typeName))                     {                         classInfo.Dic.Add(name, typeName);                     }                 }                 else                 {                     classInfo.Dic.Add(name, GetTypeString(type));                 }             }              index++;             classInfo.CLassName = "Class" + index;             dataList.Add(classInfo);             return classInfo.CLassName;         }          /// <summary>         /// 讀取集合類型         /// </summary>         /// <param name="jsArray"></param>         /// <param name="index"></param>         /// <returns></returns>         private string GetDicListType(ArrayObject jsArray, ref int index)         {             string name = string.Empty;             if ((int)jsArray.length > 0)             {                 var item = jsArray[0];                 var type = item.GetType();                 if (type == typeof(JSObject))                 {                     name = "List<" + GetDicType((JSObject)item, ref index) + ">";                 }                 else                 {                     name = "List<" + GetTypeString(type) + ">";                 }             }              return name;         }     }      public class AutoClass     {         public string CLassName { get; set; }          private Dictionary<string, string> dic = new Dictionary<string, string>();          public Dictionary<string, string> Dic         {             get             {                 return this.dic;             }             set             {                 this.dic = value;             }         }     } }

調用方式:

  1. JsonHelper helper = new JsonHelper(true); 

  2. try 

  3.    this.txtOutPut.Text = helper.GetClassString("json字符串"); 

  4. catch 

  5.    this.txtOutPut.Text = "輸入內容不符合規范..."; 

  6. }

感謝各位的閱讀,以上就是“怎么從json字符串自動生成C#類”的內容了,經過本文的學習后,相信大家對怎么從json字符串自動生成C#類這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

松原市| 鞍山市| 东平县| 自贡市| 长葛市| 桦甸市| 滦南县| 龙里县| 顺昌县| 融水| 辉县市| 外汇| 上栗县| 邵东县| 台中县| 泗阳县| 禹城市| 嵩明县| 昆明市| 张掖市| 应用必备| 文成县| 宜丰县| 芒康县| 高陵县| 元阳县| 祥云县| 临朐县| 太白县| 明光市| 崇文区| 盈江县| 秭归县| 伊宁县| 巧家县| 上高县| 西贡区| 屏南县| 赤水市| 司法| 上杭县|