ホームページ > バックエンド開発 > C++ > JSON.NET を使用して JSON オブジェクトのストリームを逆シリアル化する方法

JSON.NET を使用して JSON オブジェクトのストリームを逆シリアル化する方法

Barbara Streisand
リリース: 2025-01-09 21:23:46
オリジナル
836 人が閲覧しました

How to Deserialize a Stream of JSON Objects with JSON.NET?

JSON.NET を使用した JSON オブジェクトのストリームの逆シリアル化

多くのシナリオでは、JSON データは分離されずに個別のオブジェクトのストリームとして提供されます。 。これは、JSON.NET を使用してそのようなデータを IEnumerable に逆シリアル化するときに問題になります。

初期アプローチとエラー

次のコマンドを使用してストリームを逆シリアル化しようとしていますコードによりエラーが発生します:

var serializer = new JsonSerializer();
serializer.CheckAdditionalContent = false;

using (var reader = new StreamReader(stream))
using (var jsonReader = new JsonTextReader(reader)) {
    reader.SupportMultipleContent = true;
    reader.Read();
    while (reader.TokenType != JsonToken.None) {
        yield return serializer.Deserialize<TResult>(reader);
    }
}
ログイン後にコピー

エラーは予期せぬ終了を示しています1 つのオブジェクトを逆シリアル化した後のオブジェクトの数:

Newtonsoft.Json.JsonSerializationException: Unexpected token while deserializing object: EndObject. Path '', line 1, position 55.
ログイン後にコピー

解決策: 高度なリーダー処理

この問題を解決するには、成功するたびに JSON リーダーを手動で進める必要があります。逆シリアル化。修正されたループ構造は次のとおりです。

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())
        {
            yield return serializer.Deserialize<TResult>(jsonReader);
        }
    }
}
ログイン後にコピー

使用法と考慮事項

このメソッドを使用するには、JSON オブジェクトを含むオープン ストリームを提供します。結果として得られる IEnumerable を反復処理することが重要です。

例:

using (var stream = /* some stream */)
{
    IEnumerable<MyClass> result = ReadJson<MyClass>(stream);

    foreach (var item in result)
    {
        Console.WriteLine(item.MyProperty);
    }
}
ログイン後にコピー

この例には、JSON.NET Web サイトのデモンストレーションと DotNet Fiddle の機能例へのリンクも含まれています。

以上がJSON.NET を使用して JSON オブジェクトのストリームを逆シリアル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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