8

重複の可能性:
C#でのインクリメンタルJSON解析

次の質問は関連していますが、私が解決しようとしている問題に(少なくとも直接)対処していません。

Json.NETを使用して、潜在的に非常に大きなJSONデータを逆シリアル化しようとしています。ファイル全体をメモリにロードし、を使用してJSONを解析する代わりにJObject.Parse(JsonFullString)、ストリームトークンからトークンごとに読み取り、オブジェクトグラフを作成したいと思います。ストリームからの逆シリアル化を実装する方法についての提案をいただければ幸いです。

注:私の意図は、次のコードをより適切な実装に置き換えることです


      string jsonData = string.Empty;
      byte[] buffer = new byte[16 * 1024];
      using (MemoryStream ms = new MemoryStream())
      {
          int read;
          while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
          {
              ms.Write(buffer, 0, read);
          }
          jsonData = ASCIIEncoding.ASCII.GetString(ms.ToArray());
       }                    
       JObject jObject = JObject.Parse(jsonData);
       var entities = from e in jObject.Root
                      select e;

4

1 に答える 1

-3

良いアイデア!
あなたができることは次のとおりだと思います:

  1. 最初にオブジェクトを作成する
  2. 現在行っているように、チャンクごとにループでストリームを読み取ります
  3. 読み取ったチャンクごとに、トークンが含まれているかどうかを確認します (カンマ "," が含まれている場合)。
  4. カンマが見つからない場合 - 別のチャンクを読み取ります (この場合は小さい方でしょうか?)
  5. コンマの前のテキスト (data.split(":");) を分割し、リフレクションまたはハードコーディングされたループを使用して、考えられるすべてのオブジェクトをサポートする必要がない場合は、プロパティに値を割り当てます
  6. ループし続けます。
于 2012-06-04T17:38:45.003 に答える