我在使用JSON.Net创建时遇到一些问题。当我尝试解析它时,它给了我以下错误:
阅读完JSON内容后遇到的其他文本:
我尝试使用http://json.parser.online.fr/对其进行验证,并显示“ SyntaxError:意外令牌,”。
我的JSON如下:
{"StaffID":"S01","StaffRank":"Manager"},{"StaffID":"S02","StaffRank":"Waiter"}
如何反序列化?
您需要用方括号将其包围,这表示它是一个数组:
[{"StaffID":"S01","StaffRank":"Manager"},{"StaffID":"S02","StaffRank":"Waiter"}]
[从Release 11.0.1开始,Json.NET现在本机支持以逗号分隔的JSON解析,就像支持解析newline delimited JSON一样:]]
[新功能-增加了对使用
JsonReader.SupportMultipleContent
读取多个逗号分隔值的支持。因此
JsonReader.SupportMultipleContent
对Line delimited json serializing and de-serializing的回答在这里也应该起作用。定义扩展方法:
Yuval Itzchakov然后,给定一个数据模型,该数据模型创建为将单个项目保存在逗号分隔的列表中,例如:
public static partial class JsonExtensions { public static IEnumerable<T> FromDelimitedJson<T>(TextReader reader, JsonSerializerSettings settings = null) { using (var jsonReader = new JsonTextReader(reader) { CloseInput = false, SupportMultipleContent = true }) { var serializer = JsonSerializer.CreateDefault(settings); while (jsonReader.Read()) { if (jsonReader.TokenType == JsonToken.Comment) continue; yield return serializer.Deserialize<T>(jsonReader); } } } }
您可以反序列化显示的JSON字符串,如下所示:
public class RootObject { public string StaffID { get; set; } public string StaffRank { get; set; } }
当从大型文件中反序列化非常大的逗号分隔对象序列时,此方法可能更可取,因为不必将整个文件加载到
var jsonString = @"{""StaffID"":""S01"",""StaffRank"":""Manager""},{""StaffID"":""S02"",""StaffRank"":""Waiter""}"; var list = JsonExtensions.FromDelimitedJson<RootObject>(new StringReader(jsonString)).ToList();
中,然后将string
和'['
添加到开头并结束。在']'
中,Newtonsoft建议直接从流中反序列化大文件,因此可以将Performance Tips: Optimize Memory Usage传递到StreamReader
中,然后JsonExtensions.FromDelimitedJson()
将依次对每个对象进行反序列化。