在序列化到JSON时获得OutOfMemoryException



我正在序列化,一个MultiDictionary<String,Object>

http://powercollections.codeplex.com/to json .

它有618个元素,元素是深度嵌套的,即:一个对象中可能有几个类似字典的对象。我使用JSON。净

String json = JsonConvert.SerializeObject(json, Newtonsoft.Json.Formatting.Indented);

我错过了什么?

更多信息:-这工作得很好,直到我使用动态,我不得不切换到MultiDictionary,以允许同名的多个属性。它在大多数情况下都有效,只有当项目数量很大时,它才会失效。

UPDATE: -

我已经能够控制内存消耗,但是减少了一些递归地添加到每个元素的元素。

假设你没有循环引用-如果你不能将整个东西存储在内存中使用StreamWriter(JsonWriter或textwwriter)在Newtonsoft v4.0.30319

using (TextWriter writer = File.CreateText("LocalJSONFile.JSON"))
{
    var serializer = new JsonSerializer();
    serializer.Serialize(writer, myObject);
}

使用JsonWriter如果你试图传递字符串

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using(JsonWriter writer = new JsonTextWriter(sw))
{
  var serializer = new JsonSerializer();
  serializer.Serialize(writer, myObject);
}

似乎您遇到了导致OutOfMemoryException或您的对象对您的内存来说太大的循环引用。使用NDepend来检查这个

您可能会发现获取对象的总大小很有用。

在不知道被序列化对象的确切结构的情况下很难判断,但由于对象图如此之大,有可能在某处存在循环引用(一个对象指向另一个对象,而这个对象又指向第一个对象),从而造成序列化的无限循环。

编辑:

你可以使用一个工具,比如NDepend,来找出循环引用的位置。试一下试用版

相关内容

  • 没有找到相关文章

最新更新