我对“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();
}
当您处理大量数据时,可以将其流式传输到文件中,以避免一次性将所有数据存储在内存中。
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);
}
这将一次序列化一点,并避免内存中出现巨大的字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)