Maison >développement back-end >C++ >Comment convertir un JsonElement en un objet dans System.Text.Json de .NET ?

Comment convertir un JsonElement en un objet dans System.Text.Json de .NET ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-08 15:27:401000parcourir

Dans .NET Core 3 et supérieur, méthode pour convertir JsonElement en objet

Cet article explique comment convertir System.Text.Json en objet à l'aide de JsonElement dans .NET Core 3 et supérieur. System.Text.Json est la nouvelle bibliothèque de traitement JSON dans .NET Core 3.0 et elle ne contient pas d'équivalent de la méthode Json.NET dans ToObject() qui permet de convertir JToken en classe.

.NET 6 et supérieur :

À partir de .NET 6, JsonSerializer fournit des méthodes d'extension pour désérialiser directement depuis JsonElement ou JsonDocument :

<code class="language-csharp">public static TValue? Deserialize<TValue>(this JsonDocument document, JsonSerializerOptions? options = null);
public static object? Deserialize(this JsonDocument document, Type returnType, JsonSerializerOptions? options = null);</code>

En utilisant ces méthodes, vous pouvez facilement désérialiser des objets de JsonElement :

<code class="language-csharp">var myClass = jDoc.RootElement.GetProperty("SomeProperty").Deserialize<MyClass>();</code>

.NET 5 et versions antérieures :

Dans les versions antérieures de .NET, ces méthodes n'étaient pas disponibles. La solution de contournement consiste à écrire le JSON dans un tampon d'octets intermédiaire :

<code class="language-csharp">public static partial class JsonExtensions
{
    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);
    }
}</code>

Cette méthode fonctionne mieux que la conversion préalable de JsonElement en chaîne.

Remarque :

    Libération de
  • JsonDocument : JsonDocument utilise la mémoire poolée, elle doit donc être libérée correctement (il est recommandé d'utiliser l'instruction using).
  • Disponibilité de nouvelles méthodes : De nouvelles méthodes d'extension de désérialisation sont disponibles dans .NET 6.0 Preview RC1 et versions ultérieures.
  • Méthodes similaires pour
  • JsonNode : Des méthodes similaires existent pour le nœud de document JSON mutable JsonNode.

How to Convert a JsonElement to an Object in .NET's System.Text.Json?

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