西西軟件園多重安全檢測下載網站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

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

Json的功能擴展中的TXT交互及MDataTable

相關軟件相關文章發(fā)表評論 來源:西西整理時間:2011/4/24 17:45:53字體大小:A-A+

作者:西西點擊:105次評論:8次標簽: JSON

fastjson1.0.0 免費版
  • 類型:編程輔助大。100KB語言:中文 評分:5.0
  • 標簽:
立即下載

一開始,原本是打算在秋式開源團隊找一JS人才來引導前臺頁面的呈現的,畢竟本人在JS還停留在原始的編碼階段,于是當時聊了一下。

再后來,接下來幾天,由于秋式開源團隊內部管理上有點小調整,還有新開任務小組的事,連續(xù)忙了幾天,“愛說說”就也停了幾天。

幾天過后,回到群里Call人,發(fā)現原來JS的人才一去無蹤影了,沒法只好自己動手了。

 在定好技術方案后,下面開始技術的分析:

 “愛說說”的邏輯:

前端html-》發(fā)送ajax請求-》后端ashx處理并返回Json-》前端接收Json并解析顯示

 從后端Ashx說起:

 一:TXT文本交互的技術解析

 1:數據寫入:每次往文本的最后面寫一條Json數據,語句很簡單:

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

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

 

2:數據讀取:內存表緩存失效時,需要重新加載TXT文本的Json數據,語句也很簡單:

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

還是一行代碼,處理簡單。

3:刪除功能:需要移除TXT文本內的某行Json數據,也很容易的說:

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

還是一行的說,讀完替換,然后重新寫入。

 

OK,和IO的交互設計,相當的簡潔,也就這三個函數了,寫,讀,刪除。

二:Json的交互的技術解析
1:數據如何寫入:

從上面的分析上看,提交肯定是一行一行的數據,于是每次寫入都是一條Json語句。

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

MDataTable有ToJson功能,也有LoadFromJson功能,能把數據表轉成Json,也能從Json解析還原成內存表。

那數據行有沒有ToJson功能?答案,沒有!

替換方案可有?答案,有! 可以MDataRow.ToTable().ToJson(),即轉成表格再輸出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"}]}

格式就是這個了,前面是一些共有屬性,data內才是數據行。

如果每次把這樣的數據寫完文本,到時候讀取解析還原成表格,肯定有問題。

3:如何解決沖突:擴展功能,為單獨的數據行添加ToJson()功能

只單獨輸出:

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

這樣子,重復的往后寫,感覺就省了點字節(jié),而且也清爽秀多。

4:擴展再擴展:MDataTable.LoadFromJson要支持上

不過這么重復的寫單行Json數據,再讀取,MDataTable是解析不了的,咋整?

解析不了就擴展一下,把它解析了,由于CYQ.Data的Json,都是本人手動寫的解析。

所以,修改來解析這樣一行一行的數據,還是可以處理的。三改兩改就支持上了,一切很好。

現狀就是可以往TXT里寫出這么一系列的文本了:

{"ID":"1","ParentID":"-1","UserID":"1","NickName":"小樣...","Body":"愛說說...有話就說",第一個喲喲","CreatedOn":"4/20/2011 8:35:10 AM"}

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

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

技術手段到了這里,光明燦爛了。

一切流程很好:

1:客戶端提交數據-》

2:Ashx提交數據-》寫入內存表,然后把數據行ToJson寫入文本。

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

5:另一個重大的技術問題

一切看似很好,可是后面還是會有些問題呢的,什么問題?往下看:

看一下表格的原始屬性:

內在表定義:        private static MDataTable _Table = null;//內存數據表

表格的基本列:

                        _Table.Columns.Add("ID", SqlDbType.Int);//ID標識
                        _Table.Columns.Add("ParentID", SqlDbType.Int);//>0說明是回貼
                        _Table.Columns.Add("UserID", SqlDbType.Int);
                        _Table.Columns.Add("NickName", SqlDbType.NVarChar);
                        _Table.Columns.Add("Body", SqlDbType.NVarChar);//內容
                        _Table.Columns.Add("CreatedOn", SqlDbType.DateTime);//創(chuàng)建日期

問題:

在開始定義前,都是有不同的類型的,但如果內在表失效時,重新還原又是什么狀況?

由于Json全是字符串,在還原為內存表MDataTable時,默認全都置為SqlDbType.NVarChar,

于是表格的字段類型全變字符串了,如果只是還原后用于綁定顯示就沒啥問題了,如果此表格還需要進行一些復雜判斷比較,就比較糾結了。

正如我要查詢ID>數字的行,全是字符串就真的很糾結。

如何解決?

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

開始糾結還原后的數據類型問題,通過判斷第一行Json的文本值,來定義設置字段類型,比如:

檢測值是數字型:就Int。

檢測值是日期型:就DateTime

最后就默認給:NVarChar

為何不是辦法?

看似挺好,如果文本字段內容第一行是數字,其它行又是字符串呢?后面的內容不就糾結了?

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

既然首行取值判斷不行,如果首行存表架構呢?

首行Json字段架構如下:

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

于是,解析時,就可以準確的還原了,那如何輸出這行架構行?

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

三:總結
解決了這兩個重大的技術難題,接下來的,還有沒有其它技術問題?

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

還有沒有?

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

    相關評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

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

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數: 0/500 (您的評論需要經過審核才能顯示)