Maison >développement back-end >C++ >Comment désérialiser des éléments JSON en objets dans System.Text.Json ?

Comment désérialiser des éléments JSON en objets dans System.Text.Json ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-08 15:42:401013parcourir

How to Deserialize JSON Elements to Objects in System.Text.Json?

Désérialisation des éléments System.Text.Json

Dans Newtonsoft.Json, la méthode ToObject() est généralement utilisée pour convertir les jetons JSON en objets fortement typés. Cependant, il n’existe aucune méthode équivalente disponible dans System.Text.Json.

Solution pour .NET 6

Dans .NET 6 et versions ultérieures, des méthodes d'extension ont été ajoutées à JsonSerializer pour désérialiser les objets directement depuis JsonElement ou JsonDocument. Cela permet la syntaxe suivante :

<code class="language-csharp">using var jDoc = JsonDocument.Parse(str);
var myClass = jDoc.RootElement.GetProperty("SomeProperty").Deserialize<SomeClass>();</code>

Solution de contournement pour .NET 5 et versions antérieures

Pour .NET 5 et versions antérieures, une solution de contournement impliquant l'écriture dans un tampon d'octets intermédiaire peut être utilisée pour améliorer les performances :

<code class="language-csharp">public static T ToObject<T>(this JsonElement element, JsonSerializerOptions options = null)
{
    var bufferWriter = new ArrayBufferWriter<byte>();
    using (var writer = new Utf8JsonWriter(bufferWriter))
        element.WriteTo(writer);
    return JsonSerializer.Deserialize<T>(bufferWriter.WrittenSpan, options);
}

public static T ToObject<T>(this JsonDocument document, JsonSerializerOptions options = null)
{
    if (document == null)
        throw new ArgumentNullException(nameof(document));
    return document.RootElement.ToObject<T>(options);
}</code>

Instructions :

  • N'oubliez pas d'utiliser l'instruction JsonDocument pour using car elle peut être libérée.
  • Cette solution de contournement est disponible dans .NET Core 3.1 et versions ultérieures.

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