Maison >développement back-end >C++ >Comment désérialiser un flux d'objets JSON concaténés dans JSON.NET ?

Comment désérialiser un flux d'objets JSON concaténés dans JSON.NET ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-09 21:28:47502parcourir

How to Deserialize a Stream of Concatenated JSON Objects in JSON.NET?

Analyser le flux d'objets JSON à l'aide de JSON.NET

Lors de la désérialisation d'un flux concaténé d'objets JSON sans délimiteurs, le problème est de savoir comment le gérer correctement à l'aide de JSON.NET.

La solution tentée implique l'utilisation d'un lecteur de flux, d'un lecteur de texte JSON et d'une boucle personnalisée pour désérialiser le flux en un IEnumerable. Cependant, cette méthode a rencontré une exception indiquant une balise « EndObject » inattendue.

Pour corriger cela, quelques modifications sont à apporter à la boucle :

<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())
        {
            yield return serializer.Deserialize<TResult>(jsonReader);
        }
    }
}</code>

Il est important de noter que le IEnumerable renvoyé doit être itéré pendant que le flux reste ouvert :

<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>

Cette technologie est sur le site dotnetfiddle (https://www.php.cn/link/a3b1c195e3033e5086eb7482c0942e4a.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn