我将一个大对象数组序列化为json http响应流.现在我想一次一个地从流中反序列化这些对象.是否有任何c#库可以让我这样做?我看过json.net,但似乎我必须立即反序列化完整的对象数组.
[{large json object},{large json object}.....]
澄清:我想一次从流中读取一个json对象并反序列化它.
为了逐步读取JSON,您需要JsonTextReader
结合使用a StreamReader
.但是,您不一定要从阅读器手动读取所有JSON.您应该能够利用Linq-To-JSON API从阅读器加载每个大对象,以便您可以更轻松地使用它.
举个简单的例子,假设我有一个看起来像这样的JSON文件:
[ { "name": "foo", "id": 1 }, { "name": "bar", "id": 2 }, { "name": "baz", "id": 3 } ]
从文件中逐步读取它的代码可能如下所示.(在您的情况下,您将使用响应流替换FileStream.)
using (FileStream fs = new FileStream(@"C:\temp\data.json", FileMode.Open, FileAccess.Read)) using (StreamReader sr = new StreamReader(fs)) using (JsonTextReader reader = new JsonTextReader(sr)) { while (reader.Read()) { if (reader.TokenType == JsonToken.StartObject) { // Load each object from the stream and do something with it JObject obj = JObject.Load(reader); Console.WriteLine(obj["id"] + " - " + obj["name"]); } } }
以上输出如下:
1 - foo 2 - bar 3 - baz