到目前为止,我已经使用了Json.Net的"JsonConvert.Deserialize(json)"方法,该方法运行得很好,说实话,我不需要更多的东西.
我正在开发一个后台(控制台)应用程序,它不断从不同的URL下载json内容,然后将结果反序列化为.Net对象列表.
using (WebClient client = new WebClient())
{
string json = client.DownloadString(stringUrl);
var result = JsonConvert.DeserializeObject<List<Contact>>(json);
}
Run Code Online (Sandbox Code Playgroud)
上面的简单代码片段似乎并不完美,但它可以完成这项工作.当文件很大(15000个联系人--48 MB文件)时,JsonConvert.DeserializeObject不是解决方案,并且该行抛出异常类型的JsonReaderException.
下载的json是一个数组,这就是样本的样子.Contact是反序列化的json对象的容器类.
[
{
"firstname": "sometext",
"lastname": "sometext"
},
{
"firstname": "sometext",
"lastname": "sometext"
},
{
"firstname": "sometext",
"lastname": "sometext"
},
{
"firstname": "sometext",
"lastname": "sometext"
}
]
Run Code Online (Sandbox Code Playgroud)
我最初的猜测是内存不足.出于好奇,我试图将其解析为JArray,这也导致了同样的异常.
我已经开始深入研究Json.Net文档并阅读类似的线程.由于我还没有设法制作出有效的解决方案,我决定在这里发一个问题.
我很感激任何建议/代码片段,它可以帮助我研究问题,了解更多信息并最终找到解决方案.
谢谢 :)
更新:逐行反序列化时,我得到了同样的错误:"[.路径'',第600003行,第1位." 所以我做的是下载其中两个并在Notepad ++中检查它们.我注意到的是,如果数组长度超过12000,则在第12000个元素之后,"["关闭,另一个数组开始.换句话说,json看起来完全像这样:
[
{
"firstname": "sometext",
"lastname": "sometext"
},
{
"firstname": "sometext",
"lastname": "sometext"
},
{
"firstname": "sometext",
"lastname": "sometext"
},
{
"firstname": "sometext",
"lastname": "sometext"
} …Run Code Online (Sandbox Code Playgroud)