2013-04-23 111 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