正如您在更新中正确诊断出的那样,问题在于JSON先关闭,]
然后再打开[
以开始下一个集合。这种格式使JSON整体上无效,这就是Json.NET引发错误的原因。
幸运的是,这个问题似乎经常出现,以至于Json.NET实际上具有处理它的特殊设置。如果JsonTextReader
直接使用a 来读取JSON,则可以将SupportMultipleContent
标志设置为true
,然后使用循环分别反序列化每个项目。
这应该使您能够以内存有效的方式成功处理非标准JSON,而不管存在多少个数组或每个数组中有多少个项目。
using (WebClient client = new WebClient())
using (Stream stream = client.OpenRead(stringUrl))
using (StreamReader streamReader = new StreamReader(stream))
using (JsonTextReader reader = new JsonTextReader(streamReader))
{
reader.SupportMultipleContent = true;
var serializer = new JsonSerializer();
while (reader.Read())
{
if (reader.TokenType == JsonToken.StartObject)
{
Contact c = serializer.Deserialize<Contact>(reader);
Console.WriteLine(c.FirstName + " " + c.LastName);
}
}
}
完整的演示在这里:https ://dotnetfiddle.net/2TQa8p