日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁(yè)編程開(kāi)發(fā)javascript|JQuery → Json的功能擴(kuò)展中的TXT交互及MDataTable

      Json的功能擴(kuò)展中的TXT交互及MDataTable

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2011/4/24 17:45:53字體大。A-A+

      作者:西西點(diǎn)擊:105次評(píng)論:8次標(biāo)簽: JSON

      fastjson1.0.0 免費(fèi)版
      • 類型:編程輔助大。100KB語(yǔ)言:中文 評(píng)分:5.0
      • 標(biāo)簽:
      立即下載

      一開(kāi)始,原本是打算在秋式開(kāi)源團(tuán)隊(duì)找一JS人才來(lái)引導(dǎo)前臺(tái)頁(yè)面的呈現(xiàn)的,畢竟本人在JS還停留在原始的編碼階段,于是當(dāng)時(shí)聊了一下。

      再后來(lái),接下來(lái)幾天,由于秋式開(kāi)源團(tuán)隊(duì)內(nèi)部管理上有點(diǎn)小調(diào)整,還有新開(kāi)任務(wù)小組的事,連續(xù)忙了幾天,“愛(ài)說(shuō)說(shuō)”就也停了幾天。

      幾天過(guò)后,回到群里Call人,發(fā)現(xiàn)原來(lái)JS的人才一去無(wú)蹤影了,沒(méi)法只好自己動(dòng)手了。

       在定好技術(shù)方案后,下面開(kāi)始技術(shù)的分析:

       “愛(ài)說(shuō)說(shuō)”的邏輯:

      前端html-》發(fā)送ajax請(qǐng)求-》后端ashx處理并返回Json-》前端接收J(rèn)son并解析顯示

       從后端Ashx說(shuō)起:

       一:TXT文本交互的技術(shù)解析

       1:數(shù)據(jù)寫(xiě)入:每次往文本的最后面寫(xiě)一條Json數(shù)據(jù),語(yǔ)句很簡(jiǎn)單:

              public void AppendText(string appendText)
              {
                  File.AppendAllText(FilePath, appendText);
              }

      利用System.IO.File類即可輕松處理。

       

      2:數(shù)據(jù)讀。簝(nèi)存表緩存失效時(shí),需要重新加載TXT文本的Json數(shù)據(jù),語(yǔ)句也很簡(jiǎn)單:

              public string LoadText()
              {
                  return File.ReadAllText(FilePath);
              }

      還是一行代碼,處理簡(jiǎn)單。

      3:刪除功能:需要移除TXT文本內(nèi)的某行Json數(shù)據(jù),也很容易的說(shuō):

              public void RemoveText(string removeText)
              {
                  File.WriteAllText(FilePath, File.ReadAllText(FilePath).Replace(removeText, string.Empty));
              }

      還是一行的說(shuō),讀完替換,然后重新寫(xiě)入。

       

      OK,和IO的交互設(shè)計(jì),相當(dāng)?shù)暮?jiǎn)潔,也就這三個(gè)函數(shù)了,寫(xiě),讀,刪除。

      二:Json的交互的技術(shù)解析
      1:數(shù)據(jù)如何寫(xiě)入:

      從上面的分析上看,提交肯定是一行一行的數(shù)據(jù),于是每次寫(xiě)入都是一條Json語(yǔ)句。

      2:功能沖突:這和CYQ.Data.Table下的MDataTable的功能有什么沖突?

      MDataTable有ToJson功能,也有LoadFromJson功能,能把數(shù)據(jù)表轉(zhuǎn)成Json,也能從Json解析還原成內(nèi)存表。

      那數(shù)據(jù)行有沒(méi)有ToJson功能?答案,沒(méi)有!

      替換方案可有?答案,有! 可以MDataRow.ToTable().ToJson(),即轉(zhuǎn)成表格再輸出Json,看似挺好。

      在好之前,看一下MDataTable的ToJson()輸出什么?

      {"count":"2","error":"","success":"true","data":[
      {"ID":"2","ParentID":"-1","UserID":"2","NickName":"dddd","Body":"aaddd","CreatedOn":"2011-4-24 0:22:21"},
      {"ID":"1","ParentID":"-1","UserID":"1","NickName":"dddd","Body":"aaaaa","CreatedOn":"2011-4-24 1:19:37"}]}

      格式就是這個(gè)了,前面是一些共有屬性,data內(nèi)才是數(shù)據(jù)行。

      如果每次把這樣的數(shù)據(jù)寫(xiě)完文本,到時(shí)候讀取解析還原成表格,肯定有問(wèn)題。

      3:如何解決沖突:擴(kuò)展功能,為單獨(dú)的數(shù)據(jù)行添加ToJson()功能

      只單獨(dú)輸出:

      {"ID":"2","ParentID":"-1","UserID":"2","NickName":"dddd","Body":"aaddd","CreatedOn":"2011-4-24 0:22:21"}

      這樣子,重復(fù)的往后寫(xiě),感覺(jué)就省了點(diǎn)字節(jié),而且也清爽秀多。

      4:擴(kuò)展再擴(kuò)展:MDataTable.LoadFromJson要支持上

      不過(guò)這么重復(fù)的寫(xiě)單行Json數(shù)據(jù),再讀取,MDataTable是解析不了的,咋整?

      解析不了就擴(kuò)展一下,把它解析了,由于CYQ.Data的Json,都是本人手動(dòng)寫(xiě)的解析。

      所以,修改來(lái)解析這樣一行一行的數(shù)據(jù),還是可以處理的。三改兩改就支持上了,一切很好。

      現(xiàn)狀就是可以往TXT里寫(xiě)出這么一系列的文本了:

      {"ID":"1","ParentID":"-1","UserID":"1","NickName":"小樣...","Body":"愛(ài)說(shuō)說(shuō)...有話就說(shuō)&quot;,第一個(gè)喲喲","CreatedOn":"4/20/2011 8:35:10 AM"}

      {"ID":"2","ParentID":"-1","UserID":"2","NickName":"路過(guò)秋天","Body":"不知道怎么回事說(shuō),隨便來(lái)幾字,明字何期多。","CreatedOn":"4/20/2011 8:37:35 AM"}

      再然后就是MDataTable.LoadFromjson又可以從這種格式還原成內(nèi)存表了。

      技術(shù)手段到了這里,光明燦爛了。

      一切流程很好:

      1:客戶端提交數(shù)據(jù)-》

      2:Ashx提交數(shù)據(jù)-》寫(xiě)入內(nèi)存表,然后把數(shù)據(jù)行ToJson寫(xiě)入文本。

      3:內(nèi)存表在內(nèi)存,總有失效的時(shí)候,失效時(shí)LoadFromJson又還原成表格,又繼續(xù)。

      5:另一個(gè)重大的技術(shù)問(wèn)題

      一切看似很好,可是后面還是會(huì)有些問(wèn)題呢的,什么問(wèn)題?往下看:

      看一下表格的原始屬性:

      內(nèi)在表定義:        private static MDataTable _Table = null;//內(nèi)存數(shù)據(jù)表

      表格的基本列:

                              _Table.Columns.Add("ID", SqlDbType.Int);//ID標(biāo)識(shí)
                              _Table.Columns.Add("ParentID", SqlDbType.Int);//>0說(shuō)明是回貼
                              _Table.Columns.Add("UserID", SqlDbType.Int);
                              _Table.Columns.Add("NickName", SqlDbType.NVarChar);
                              _Table.Columns.Add("Body", SqlDbType.NVarChar);//內(nèi)容
                              _Table.Columns.Add("CreatedOn", SqlDbType.DateTime);//創(chuàng)建日期

      問(wèn)題:

      在開(kāi)始定義前,都是有不同的類型的,但如果內(nèi)在表失效時(shí),重新還原又是什么狀況?

      由于Json全是字符串,在還原為內(nèi)存表MDataTable時(shí),默認(rèn)全都置為SqlDbType.NVarChar,

      于是表格的字段類型全變字符串了,如果只是還原后用于綁定顯示就沒(méi)啥問(wèn)題了,如果此表格還需要進(jìn)行一些復(fù)雜判斷比較,就比較糾結(jié)了。

      正如我要查詢ID>數(shù)字的行,全是字符串就真的很糾結(jié)。

      如何解決?

      想法一:有想法不是辦法:

      開(kāi)始糾結(jié)還原后的數(shù)據(jù)類型問(wèn)題,通過(guò)判斷第一行Json的文本值,來(lái)定義設(shè)置字段類型,比如:

      檢測(cè)值是數(shù)字型:就Int。

      檢測(cè)值是日期型:就DateTime

      最后就默認(rèn)給:NVarChar

      為何不是辦法?

      看似挺好,如果文本字段內(nèi)容第一行是數(shù)字,其它行又是字符串呢?后面的內(nèi)容不就糾結(jié)了?

      想法二:有想法也是辦法:

      既然首行取值判斷不行,如果首行存表架構(gòu)呢?

      首行Json字段架構(gòu)如下:

      {"ID":"System.Int32","ParentID":"System.Int32","UserID":"System.Int32","NickName":"System.String","Body":"System.String","CreatedOn":"System.DateTime"}

      于是,解析時(shí),就可以準(zhǔn)確的還原了,那如何輸出這行架構(gòu)行?

      于是,MDataColumn也多了個(gè)ToJson功能,用于輸出表架構(gòu),至此,Json的交互方面,也大功告成了!

      三:總結(jié)
      解決了這兩個(gè)重大的技術(shù)難題,接下來(lái)的,還有沒(méi)有其它技術(shù)問(wèn)題?

      有,查詢功能,即將擴(kuò)展的MDataTable.Select(......)功能。

      還有沒(méi)有?

      大的沒(méi)了,還有就是技術(shù)細(xì)節(jié)問(wèn)題了,如:接收參數(shù),定義文本路徑,定義最大行ID等。

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過(guò)難過(guò)
        • 5 囧
        • 3 圍觀圍觀
        • 2 無(wú)聊無(wú)聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(8)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)