使用Newtonsoft Json从流中反序列化多个json对象
我正在为json
字符串读取NetworkStream
,然后使用Newtonsoft.Json
对其进行反序列 Newtonsoft.Json
。
有时,两个json
对象可以在流上同时发送回来并同时读取。 但是Newtonsoft.Json
serializer
只给了我一个对象。
例如,如果我在流上有以下字符串:
{"name":"John Doe","age":10}{"name":"Jane Doe","age":10}
如果我反serializer
流, serializer
将读取整个流,但只提供第一个对象。
有没有办法让serializer
只读取流中的第一个对象,然后在循环的下一次迭代中读取下一个对象?
码:
public static Person Deserialize(Stream stream) { var Serializer = new JsonSerializer(); var streamReader = new StreamReader(stream, new UTF8Encoding()); return Serializer.Deserialize(new JsonTextReader(streamReader)); }
我无法将其序列化为列表,因为我没有收到json
数组。
我想你可以这样做:
public static IList Deserialize(Stream stream) { var serializer = new JsonSerializer(); var streamReader = new StreamReader(stream, new UTF8Encoding()); var result = new List (); using (var reader = new JsonTextReader(streamReader)) { reader.CloseInput = false; // important part reader.SupportMultipleContent = true; while (reader.Read()) { result.Add(serializer.Deserialize (reader)); } } return result; }
重要的部分是SupportMultipleContent
属性,它通知读者可能有多个json对象并排。
你可以尝试这样做
var httpRequest = HttpContext.Current.Request; // This list will have all the stream objects var persons = new List(); if (httpRequest.Files.Count > 0) { for (var obj = 0; doc < httpRequest.Files.Count; obj++) { var postedFile = httpRequest.Files[obj]; var bytes = new byte[postedFile.ContentLength]; postedFile.InputStream.Read(bytes, 0, postedFile.ContentLength); persons.Add(Serializer.Deserialize (new JsonTextReader(new StreamReader(new MemoryStream(bytes))))); } }