SerializeObject抛出System.OutOfMemoryException

时间:2016-09-20 15:30:39

标签: c# json.net

我有一个严重的问题“JsonConvert.SerializeObject”我需要序列化超过500,000个字典记录,以使序列化引发以下错误; System.OutOfMemoryException的。我试图在foreach中单独序列化每个键值对,但它已被锁定。显然这是一个优化问题,但我不知道从哪里开始,线程序列化的部分? 这些函数可以很好地处理几个值。 我的代码:

string json = JsonConvert.SerializeObject(DatatableToDictionary(dt), Newtonsoft.Json.Formatting.Indented);

public List<Dictionary<string, object>> DatatableToDictionary(DataTable dt, List<DataColumn> columns)
{
    return dt.Rows.Cast<DataRow>().Select(
         r => columns.ToDictionary(c => c.ColumnName, c => r[c.ColumnName])).ToList();
}

1 个答案:

答案 0 :(得分:5)

当您处理大量数据时,您可以将其流式传输到文件中,以避免一次性将其全部存储在内存中。

var filePath = @"C:\somewhere.json";

using (var fs = File.Open(filePath, FileMode.CreateNew))
using (var sw = new StreamWriter(fs))
using (var jw = new JsonTextWriter(sw))
{
    var serializer = new JsonSerializer();
    serializer.Serialize(jw, dictionary);
}

这将一次序列化一次并避免在内存中有一个巨大的字符串。

相关问题