我将大对象数组序列化为json http响应流。现在,我想一次从流中反序列化这些对象。是否有任何C#库可以让我做到这一点?我看过json.net,但似乎必须立即反序列化对象的完整数组。
[{large json object},{large json object}.....]
澄清:我想一次从流中读取一个json对象并将其反序列化。
为了逐步读取JSON,您需要JsonTextReader结合使用和StreamReader。但是,您不必一定要从阅读器中手动读取所有JSON。您应该能够利用Linq- To-JSON API从读取器加载每个大对象,以便您可以更轻松地使用它。
JsonTextReader
StreamReader
举个简单的例子,假设我有一个如下所示的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