我有一个严重的问题“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();
}
答案 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);
}
这将一次序列化一次并避免在内存中有一个巨大的字符串。