我对"JsonConvert "有一个严重的问题。"我需要序列化超过500,000个字典记录才能使serialize抛出以下错误;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();
}
当你处理大量的数据时,你可以将它们流式传输到一个文件中,以避免它们一次都在内存中。
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);
}
这将每次序列化一个位,并避免在内存中有一个巨大的字符串。