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
Libérer: 2025-01-08 15:42:40
original
977 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal