JSON.NET を使用して JSON オブジェクト ストリームを解析する
JSON.NET は、接続された JSON オブジェクトのストリームを逆シリアル化する便利なソリューションを提供します。これを達成する際、逆シリアル化のたびにリーダーをどのように進めるかという問題に遭遇する可能性があります。
指定されたコード スニペットは、JSON オブジェクトのストリームを逆シリアル化しようとしましたが、予期しないトークン エラーにより失敗しました。この問題を解決するには、コードを次のように変更します。
<code class="language-csharp">public IEnumerable<TResult> ReadJson<TResult>(Stream stream) { var serializer = new JsonSerializer(); using (var reader = new StreamReader(stream)) using (var jsonReader = new JsonTextReader(reader)) { jsonReader.SupportMultipleContent = true; while (jsonReader.Read() && !jsonReader.EOF) // 添加EOF检查 { try { yield return serializer.Deserialize<TResult>(jsonReader); } catch (JsonReaderException ex) { // 处理JSON读取异常,例如跳过无效的JSON对象 Console.WriteLine($"JSON解析错误: {ex.Message}"); // 可选:在此处添加日志记录或其他错误处理机制 } } } }</code>
この変更されたコードでは、ストリームから各 JSON オブジェクトを読み取り、逆シリアル化された結果を生成するようにループが調整されています。オブジェクト破棄エラーを防ぐために、提供されたストリームが開いている間に、返された IEnumerable<TResult>
を反復処理することが重要です。 さらに、無限ループを回避するために !jsonReader.EOF
チェックが追加され、無効な JSON オブジェクトの検出などの潜在的な try-catch
を処理するために JsonReaderException
ブロックが追加されました。
これは例です:
<code class="language-csharp">using (var stream = /* some stream */) { IEnumerable<MyClass> result = ReadJson<MyClass>(stream); foreach (var item in result) { Console.WriteLine(item.MyProperty); } }</code>
JsonReader を使用して複数の JSON フラグメントを処理する方法の詳細については、公式の JSON.NET ドキュメントを参照してください。
以上がJSON.NETを使用してJSONオブジェクトのストリームを解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。