ホームページ > バックエンド開発 > C++ > JSON.NETを使用してJSONオブジェクトのストリームを解析するにはどうすればよいですか?

JSON.NETを使用してJSONオブジェクトのストリームを解析するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-09 21:31:47
オリジナル
422 人が閲覧しました

How to Parse a Stream of JSON Objects Using JSON.NET?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート