Streamreader 在读取大型 JSON 文件时无法读取服务器 500 错误中的文件
Posted
技术标签:
【中文标题】Streamreader 在读取大型 JSON 文件时无法读取服务器 500 错误中的文件【英文标题】:Streamreader cannot read file in server 500 error while reading large JSON file 【发布时间】:2022-01-06 06:15:11 【问题描述】:我正在尝试读取一个大型 (2.3mb) json 文件并将其作为 json 在网络上返回。
string path = AppDomain.CurrentDomain.BaseDirectory + @"GeoJson/MaliCommunes.geo.json";
string json;
using (StreamReader sr = new StreamReader(path, Encoding.GetEncoding("iso-8859-1")))
json = sr.ReadToEnd();
javascriptSerializer JsonSerializer = new JavaScriptSerializer();
object data = JsonSerializer.DeserializeObject(json);
return new JsonResult()
Data = data,
ContentType = "application/json",
ContentEncoding = Encoding.UTF8,
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
MaxJsonLength = Int32.MaxValue
;
这适用于本地主机,但是当我将其上传到服务器时,我在这一行 using (StreamReader sr = new StreamReader(path, Encoding.GetEncoding("iso-8859-1")))
上收到 500 错误“找不到文件”
我在网络配置中尝试了以下内容:
-
在 httpRuntime 中添加 maxRequestLength
为 jsonSerialization 添加 maxJsonLength
我的猜测是,要么文件被曲解(它确实有法语重音字符),要么文件太大而导致服务器出现问题。
【问题讨论】:
听起来您的 AppDomain.CurrentDomain.BaseDirectory 在服务器上无法正常工作? 确实如此,它用较小的 geojson 文件替换了该文件,并且没有任何问题。 服务器有内存限制吗? 所以你已经有了 json 数据。您正在努力将其解压缩到一个对象中,只是为了再次重新序列化它?只需提供文件即可。 这并不能解决我的问题,因为我仍然需要使用某种阅读器来阅读文件。 【参考方案1】:-
更仔细地检查大 json 文件的名称。它可以有一个不可见的扩展名。通过尝试手动打开 json 文件来检查路径。只需使用 Windows 资源管理器输入完整路径。
在大json文件的安全选项卡中查看权限,并与正常工作的json文件的权限进行比较。
【讨论】:
【参考方案2】:我去掉了法语口音,它起作用了
【讨论】:
以上是关于Streamreader 在读取大型 JSON 文件时无法读取服务器 500 错误中的文件的主要内容,如果未能解决你的问题,请参考以下文章
C# 文件流 streamreader如何读取文本指定行的数据?