この記事では、無効な構文や不正な構文が含まれる可能性のある大きな JSON ファイルを解析するという課題に取り組みます。特定の形式は Json.NET でネイティブにサポートされていません。
この問題は、JSON データが次のもので構成されている場合に発生します。複数の配列を 1 つの配列内でネストするのではなく、閉じ括弧と開き括弧で区切ります。標準の JSON 構文からの逸脱により、Json.NET の組み込み逆シリアル化メソッドで問題が発生する可能性があります。
最初は、JsonConvert.DeserializeObject を使用して大きな JSON ファイルを解析すると、データがメモリ制限を超えると例外が発生します。同様に、JArray に直接逆シリアル化しようとすると、エラーが発生する可能性があります。
このシナリオを効果的に処理するために、JsonTextReader を含むカスタマイズされたアプローチを利用します。 SupportMultipleContent フラグを true に設定すると、リーダーは無効な JSON 形式を認識し、各配列を個別のコンテンツ セクションとして扱うことができます。
次の C# コードは、次の方法を示しています。この手法を実装します:
using (WebClient client = new WebClient()) using (Stream stream = client.OpenRead(stringUrl)) using (StreamReader streamReader = new StreamReader(stream)) using (JsonTextReader reader = new JsonTextReader(streamReader)) { reader.SupportMultipleContent = true; var serializer = new JsonSerializer(); while (reader.Read()) { if (reader.TokenType == JsonToken.StartObject) { Contact c = serializer.Deserialize<Contact>(reader); Console.WriteLine(c.FirstName + " " + c.LastName); } } }
このメソッドを使用して各配列に個別にアクセスすることで、JSON データを効率的に逆シリアル化できます。行ごとに、標準の Json.NET 解析メソッドで発生するメモリと構文の制限を効果的に克服します。
以上が.NET で JSON.NET を使用して大きな無効な JSON ファイルを解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。