2013-04-23 108 views
0

我建立一個高速緩存系統爲我的應用程序,來保存所有的在Dictionary<string, CacheWrapper>對象,其中鍵(串)是REST的URL請求數據接收JSON數據(即WWW .dataapi.com /活動/ 28127.json)問題反序列化JSON長字符串與JSON.NET

CacheWrapper類:

class CacheWrapper { 
    object cachedObject { get; set; } 
    DateTime expires { get; set; } 
    public isValid() { /*...*/ } 
} 

當應用程序關閉時,這個(潛在的)非常大的數據結構被序列與JSON.net並寫入文件。 這一切工作正常。這個問題出現在使用了幾天後,當用戶累積了大量的數據(比如2-3 MB的JSON數據)。當我試圖反序列化這個時,JSON.net會拋出一個JsonReaderException - 我懷疑這是因爲它的全部大小。用較少量的數據,這工作得很好。

是否有任何限制,當談到給JsonConvert.DeserializeObject<T>(json) JSON字符串的大小?還有其他原因嗎?據我所知,生成的JSON是有效的(我在〜1.5mb的數據上進行了測試,並通過了驗證器)。

更新:

我試圖濫用我的應用程序儘可能,並結束了JSON的600萬字符的字符串(〜12 MB)。出於某種原因,這工作正常。所以尺寸似乎不是問題。該JsonReaderException我前面提到的有是JSON的反序列化過程的問題(可能是非法的JSON然後..),但是這本身就是很奇怪,因爲我用JSON.net這個數據的序列化和反序列化。這不斷變得越來越怪異。我將在整個一天繼續進行測試,並在此處提及我的發現。

+0

數據2-3MB是相當小的,現在給天。你是否試過用戶系統將增長到的相同數據量。如果不是,那麼我會建議先做這個來消除體積問題。 – TheKingDave 2013-04-23 12:15:29

+0

我已經使用我的應用程序非常連續約48小時。最大緩存時間爲24小時,所以數據量不會比這大很多。它可能不是一個大的數據量,但它是一個有點大的物體在一塊反序列化:-) – 2013-04-23 12:20:20

+0

存儲在一個文件中,整個高速緩存可能是更好的分割數據爲根據使用情況和存儲連續塊而不是他們在單獨的文件中。基本上實施存儲策略。 – Romoku 2013-04-23 12:44:26

回答

0

嘗試使用.NET DataContractJsonSerializer
它更加靈活和強大,並允許您使用流(如果可用)。

+0

嘗試使用 - 但據我瞭解,它不支持序列化或反序列化Dictionary對象。 – 2013-04-23 12:33:14