我正在序列化,一个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,来找出循环引用的位置。试一下试用版