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

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

.NETJson解析到Dictionary,原生代碼

2019-11-14 16:40:33
字體:
來源:轉載
供稿:網友

之前一直使用微軟自帶的Json,也一直想試著自己解析下Json玩玩,于是花了一個晚上的時間寫了個解析的類,

 

  先說下思路,先從簡單的說起:如:標準的JSon格式如:{"Key":"Value1","Key2":1,"Key3":[1,2,3,4],"Key4":{"Test1":"2"},"Key5":[{"A":1,"B":2}]}

 我是這樣分的把{}的內容看成是一個完整的對象,遇到{}就把他當完整的對象解析(我表達能力可能有問題,不太會表達)

首先是讀Key 嚴格的格式來說 Key必須帶雙引號,但不排除沒帶的  所以我做了下判斷  如果有雙引號 就去掉 ,然后都value值,Value值大致可分三種,

  一種就是普通的值 如:字符串、數字、時間,

  第二種是 完整的類  ,

  第三種就是數組,但數組其實也可以分為兩種,一種是普通數組,一種是帶子類的數組,

測試了下性能 感覺還行,就發上來了  

別吐槽哈 小弟也就這兩下子

  1 #region 聲明  2 /********************************************************************************************  3      *  CLR版本:4.0.30319.34011  4      * .NET版本:V4.0  5      * 類 名 稱:SR   6      * 命名空間:DotNet  7      * 創建時間:2014/3/9 19:19:36  8      * 作    者:中國.NET研究協會 (網站:http://www.dotnet.org.cn  QQ群:45132984)  9      * 識 別 號:b8f20131-829f-4db0-87a7-d62f8c5ab404 10 ********************************************************************************************/ 11 /*****************************************本版權權******************************************* 12  * 本軟件遵照GPL協議開放源代碼,您可以自由傳播和修改,在遵照下面的約束條件的前提下: 13  *      一. 只要你在每一副本上明顯和恰當地出版版權聲明,保持此許可證的聲明和沒有 14  *          擔保的聲明完整無損,并和程序一起給每個其他的程序接受者一份許可證的副本, 15  *          你就可以用任何媒體復制和發布你收到的原始的程序的源代碼。你也可以為轉讓 16  *          副本的實際行動收取一定費用,但必須事先得到的同意。 17  *      二. 你可以修改本軟件的一個或幾個副本或程序的任何部分,以此形成基于程序的作品。 18  *          只要你同時滿足下面的所有條件,你就可以按前面第一款的要求復制和發布這一經 19  *          過修改的程序或作品。 20  *      三.只要你遵循一、二條款規定,您就可以自由使用并傳播本源代碼, 21  *         但必須原封不動地保留原作者信息。 22  **********************************************************************************************/ 23 using System; 24 using System.Collections.Generic; 25 using System.IO; 26 using System.Linq; 27 using System.Text; 28  29 namespace DotNet.Json 30 { 31     public class JsonReader 32     { 33         PRivate TextReader myReader; 34         private int EndCount = 0; 35         Dictionary<string,object> myObjDate; 36         private JsonReader(TextReader reader, int endCount = 0) 37         { 38             myObjDate = myObjDate = new Dictionary<string, object>(); 39             myReader = reader; 40             EndCount = endCount; 41             int intByte = ReadInt(); 42             while (EndCount != 0 && intByte != -1) 43             { 44                 var key = ReadKeyName(intByte); 45                 var value = ReadValue(); 46                 myObjDate.Add(key, value); 47                 if (EndCount == 0) { break; } 48                 intByte = ReadInt(); 49             } 50         } 51         public JsonReader(TextReader reader) 52             : this(reader, 0) 53         { } 54         public JsonReader(string value) 55             : this(new StringReader(value), 0) 56         { } 57         private int ReadInt() 58         { 59             var intByte = myReader.Read(); 60             if (intByte == 123) 61             { 62                 EndCount++; 63             } 64             else if (intByte == 125) 65             { 66                 EndCount--; 67             } 68             return intByte; 69         } 70         private string ReadKeyName(int lastChar) 71         { 72             StringBuilder strBuilder = new StringBuilder(); 73             var intByte = lastChar; 74             if (intByte == 123) 75             { 76                 intByte = myReader.Read(); 77             } 78             var lastIntByte = -1; 79             int endByteInt = -1; 80             if (intByte == -1) 81             { 82                 return null; 83             } 84             if (intByte == 34 || intByte == 39) 85             { 86                 endByteInt = intByte; 87                 intByte = myReader.Read(); 88             } 89             while (intByte != -1) 90             { 91                 if (endByteInt != -1) 92                 { 93                     if (intByte == endByteInt && lastIntByte != 92) 94                     { 95                         ReadInt(); 96                         break; 97                     } 98                 } 99                 else if (intByte == 58)100                 {101                     break;102                 }103 104                 strBuilder.Append((char)intByte);105                 intByte = myReader.Read();106             }107             return strBuilder.ToString();108         }109         private object ReadValue()110         {111             var intByte = myReader.Read();112             if (intByte == 123)113             {114                 //函數115                 var item = new JsonReader(myReader, 1).myObjDate;116                 ReadInt();117                 return item;118             }119             else if (intByte == 91)120             {121                 return ReadValueArray();122             }123             else124             {125                 return ReadValueString(intByte);126             }127         }128         private string ReadValueArrayString(ref int lastChar)129         {130             StringBuilder strBuilder = new StringBuilder();131             var intByte = lastChar;132             if (intByte == 123)133             {134                 intByte = myReader.Read();135             }136             var lastIntByte = -1;137             int endByteInt = -1;138             if (intByte == -1)139             {140                 return null;141             }142             if (intByte == 34 || intByte == 39)143             {144                 endByteInt = intByte;145                 intByte = myReader.Read();146             }147             while (intByte != -1)148             {149                 lastChar = intByte;150                 if (endByteInt != -1)151                 {152                     if (intByte == endByteInt && lastIntByte != 92)153                     {154                         break;155                     }156                 }157                 else if (intByte == 44 || (intByte == 93 && lastIntByte != 92))158                 {159                     break;160                 }161 162                 strBuilder.Append((char)intByte);163                 intByte = ReadInt();164             }165             return strBuilder.ToString();166         }167         private object ReadValueString(int lastChar)168         {169             StringBuilder strBuilder = new StringBuilder();170             var intByte = lastChar;171             if (intByte == 123)172             {173                 intByte = myReader.Read();174             }175             var lastIntByte = -1;176             int endByteInt = -1;177             if (intByte == -1)178             {179                 return null;180             }181             if (intByte == 34 || intByte == 39)182             {183                 endByteInt = intByte;184                 intByte = myReader.Read();185             }186             while (intByte != -1)187             {188                 if (endByteInt != -1)189                 {190                     if (intByte == endByteInt && lastIntByte != 92)191                     {192                         ReadInt();193                         break;194                     }195                 }196                 else if (intByte == 44 || (intByte == 125 && lastIntByte != 92))197                 {198                     break;199                 }200                 strBuilder.Append((char)intByte);201                 intByte = ReadInt();202             }203             return strBuilder.ToString();204         }205         private object[] ReadValueArray()206         {207             List<object> list = new List<object>();208             var intByte = myReader.Read();209             while (intByte != 93)210             {211                 if (intByte == 123)212                 {213                     var item = new JsonReader(myReader, 1).myObjDate;214                     list.Add(item);215                     if (ReadInt() == 93)216                     {217                         break;218                     }219                 }220                 else if (intByte == 91)221                 {222                     list.Add(ReadValueArray());223                 }224                 else225                 {226                     list.Add(ReadValueArrayString(ref intByte));227                     if (intByte == 93) { break; }228                 }229                 intByte = myReader.Read();230             }231             return list.ToArray();232         }233     }234 }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线亚洲一区| 国内精品视频久久| 亚洲成年人在线播放| 亚洲字幕在线观看| 日韩日本欧美亚洲| 亚洲男人av在线| 亚洲国产精久久久久久久| 亚洲一区中文字幕在线观看| 久久国产精彩视频| 亚洲午夜久久久久久久| 精品国产精品三级精品av网址| 欧美在线免费看| 性金发美女69hd大尺寸| 91日本视频在线| 日韩欧美国产激情| 久久久影视精品| www.亚洲一二| 亚洲男子天堂网| 欧美一级bbbbb性bbbb喷潮片| 成人久久久久久| 草民午夜欧美限制a级福利片| 精品中文字幕在线观看| 69久久夜色精品国产69| 欧美久久久精品| 日韩美女视频免费看| 91精品国产高清久久久久久91| 91最新在线免费观看| 久久久精品一区二区三区| 性欧美长视频免费观看不卡| 一区二区三区视频免费在线观看| 日韩欧美主播在线| 亚洲色图校园春色| 国内精品一区二区三区四区| 亚洲xxxx3d| 欧美在线激情视频| 狠狠躁夜夜躁久久躁别揉| 久久精品久久久久电影| 91av在线不卡| 亚洲欧洲在线免费| 亚洲第一男人天堂| 欧美在线视频观看免费网站| 国产免费亚洲高清| 91久久精品国产91久久性色| 欧美午夜精品久久久久久人妖| 97久久久免费福利网址| 欧美与欧洲交xxxx免费观看| 国产xxx69麻豆国语对白| 国产免费一区视频观看免费| 久久精品男人天堂| 亚洲男女自偷自拍图片另类| 欧美成人国产va精品日本一级| 国产成人短视频| 成人午夜在线观看| 亚洲最大福利网| 国产精品激情av电影在线观看| 亚洲最新中文字幕| 欧美大全免费观看电视剧大泉洋| 性亚洲最疯狂xxxx高清| 国产精品一区二区三区成人| 伊人久久大香线蕉av一区二区| 91久久夜色精品国产网站| 欧美激情综合色综合啪啪五月| 欧美主播福利视频| 国产精品高清在线观看| 国产精品一区二区三| 亚洲国产精彩中文乱码av在线播放| 欧美精品中文字幕一区| 久久久久久久久久久久久久久久久久av| 国产亚洲一区二区精品| 91精品久久久久| 色综合亚洲精品激情狠狠| 91人成网站www| 欧美激情xxxx性bbbb| 国产精品久久久久久久久久ktv| 亚洲成色www8888| 一本色道久久88精品综合| 91网站在线看| 日本亚洲欧美成人| 欧美视频在线免费| 欧美电影院免费观看| 中文字幕日韩精品有码视频| 91精品国产91久久| 日本精品久久久久久久| 欧美激情亚洲国产| 精品国产乱码久久久久久婷婷| 在线丨暗呦小u女国产精品| 国产成人av网| 精品福利在线观看| 国产精品人成电影| 色偷偷91综合久久噜噜| 日本精品免费一区二区三区| 亚洲高清久久网| 国产亚洲成精品久久| 亚洲韩国欧洲国产日产av| 久久影院中文字幕| 久久国产精品久久久久久久久久| 国产成人自拍视频在线观看| 日韩中文在线视频| 国产有码一区二区| 曰本色欧美视频在线| 久久精品国产免费观看| 91精品国产成人| 久久久久国产一区二区三区| 青青青国产精品一区二区| 成人久久久久久久| 国产精品影片在线观看| 国产91九色视频| 正在播放欧美一区| 国产精品旅馆在线| 国产精品第七影院| www.亚洲天堂| 91日韩在线视频| 欧美大片欧美激情性色a∨久久| 国产日韩欧美在线| 亚洲一级免费视频| 91精品视频播放| 亚洲综合小说区| 亚洲精品91美女久久久久久久| 亚洲日本中文字幕免费在线不卡| 欧美视频一二三| 欧美另类暴力丝袜| 成人综合网网址| 日韩中文字幕在线精品| 日韩电影中文字幕在线观看| 中文字幕av一区| 精品视频在线播放| 美女视频黄免费的亚洲男人天堂| 欧美xxxx18性欧美| 精品调教chinesegay| 成人伊人精品色xxxx视频| 久久精品国产一区二区三区| 国产日韩欧美黄色| 这里只有精品视频| 92看片淫黄大片看国产片| 久久视频在线直播| 欧美精品一区二区三区国产精品| 成人做爽爽免费视频| 一道本无吗dⅴd在线播放一区| 国产精品大片wwwwww| 欧美一级视频一区二区| 国产精品成人一区二区| 欧美另类老肥妇| 欧美国产日韩xxxxx| 国产一区二区黑人欧美xxxx| 日韩视频一区在线| 精品国产一区二区在线| 午夜免费久久久久| 欧美日韩一区二区免费视频| 国产69久久精品成人看| 亚洲高清av在线| 亚洲欧美综合精品久久成人| 激情懂色av一区av二区av| 91精品国产91久久| 国产精品久久久久av免费| 国产精品专区h在线观看| 久久亚洲国产成人| 亚洲欧美精品中文字幕在线| 亚洲天堂av在线播放| 亚洲最大成人免费视频| 欧美一级黄色网| 国产精品扒开腿做爽爽爽的视频| 欧美午夜女人视频在线| 国模精品系列视频| 欧美麻豆久久久久久中文|