一尘不染

一次反序列化json数组流一个项目

json

我将大对象数组序列化为jsonhttp响应流。现在,我想一次从流中反序列化这些对象。是否有任何C#库可以让我做到这一点?我看过json.net,但似乎必须立即反序列化对象的完整数组。

[{large json object},{large json object}.....]

澄清:我想一次从流中读取一个json对象并将其反序列化。


阅读 330

收藏
2020-07-27

共1个答案

一尘不染

为了逐步读取JSON,您需要JsonTextReader结合使用和StreamReader。但是,您不必一定要从阅读器中手动读取所有JSON。您应该能够利用Linq-To-JSONAPI从读取器加载每个大对象,以便您可以更轻松地使用它。

举个简单的例子,假设我有一个看起来像这样的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
2020-07-27