json - 将大型 JSON 文件读入 C#.net 中的变量

标签 json json.net jsonreader

我正在尝试解析 JSON 文件并插入到 SQL DB 中。只要文件很小(小于 5 MB),我的解析器就可以正常工作。

尝试读取大(> 5MB)文件时出现“内存不足异常”。

if (System.IO.Directory.Exists(jsonFilePath))
                {
                    string[] files = System.IO.Directory.GetFiles(jsonFilePath);
                    foreach (string s in files)
                    {
                        var jsonString = File.ReadAllText(s);
                        fileName = System.IO.Path.GetFileName(s);
                        ParseJSON(jsonString, fileName);

                    }
                }

我尝试了 JSONReader 方法,但没有成功将整个 JSON 转换为字符串或变量。请指教。

最佳答案

使用 64 位,检查 RredCat 对类似问题的回答:

Newtonsoft.Json - Out of memory exception while deserializing big object

NewtonSoft Jason Performance Tips

阅读 David Cox 关于标记化的文章:

“基本方法是使用 JsonTextReader 对象,它是 Json.NET 库的一部分。JsonTextReader 一次读取一个 JSON 文件。因此,它避免了将整个文件读入字符串的开销。如从文件中读取 token ,创建对象并将其压入和压出堆栈。当到达文件末尾时,堆栈的顶部包含一个对象 - 与这些对象对应的非常大的对象树的顶部在原始 JSON 文件中”

Parsing Big Records with Json.NET

关于json - 将大型 JSON 文件读入 C#.net 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38577622/

相关文章:

javascript - 对 JSON 中的所有数据类型使用字符串是个好主意吗?

json - 如何在 Postgres 中调用带有 json 参数的函数

json - 替代 Json.Net

c# - 为什么 Json.NET 无法序列化 X509Certificate2?

android - JsonReader 抛出 IllegalStateException

javascript - 如何将 JSON 文本转换为 JSON 对象?

c# - 为 WCF REST 服务生成示例数据?

c# - 检查 JSON 和 XML 是否有效? C#

android - 在 Android 的 API 8 中使用 JSON Reader

java - 将值从 JsonObject 转换为 BigDecimal