使用JSON.NET反序列化长JSON字符串的问题

时间:2013-04-23 12:11:39

标签: c# .net json windows-phone json.net

我正在为我的应用程序构建一个缓存系统,它将所有收到的JSON数据保存在Dictionary<string, CacheWrapper>对象中,其中键(字符串)是要求数据的REST-url(即www.dataapi.com/事件/ 28127.json)

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.5 MB的数据,并通过了验证器)。

更新

我试图尽可能地滥用我的应用程序,最终获得了600万字符串的JSON(~12 mb)。出于某种原因,这很好。所以尺寸似乎不是问题。我之前提到的JsonReaderException在反序列化JSON期间有一个问题(可能是非法的json然后......),但这本身很奇怪,因为我使用JSON.net对这些数据进行序列化和反序列化。这一直在变得更加怪异。我将继续全天测试并在此提及我的发现。

1 个答案:

答案 0 :(得分:0)

尝试使用.NET DataContractJsonSerializer
它更加灵活和强大,并且允许您在流可用时使用流。