Maison >développement back-end >C++ >Comment convertir efficacement JsonElement en un objet .NET ?

Comment convertir efficacement JsonElement en un objet .NET ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-08 15:31:40806parcourir

Convertir efficacement JsonElement en un objet .NET

System.Text.Json, introduit dans .NET Core 3.0, offre une solution de gestion JSON hautes performances. Cependant, contrairement à Json.NET, il lui manquait un équivalent direct à la méthode ToObject pour une conversion pratique de JsonElement en objet .NET jusqu'à .NET 6.

.NET 6 et au-delà : conversion simplifiée

.NET 6 et les versions ultérieures fournissent des méthodes d'extension intégrées dans JsonSerializer qui rationalisent le processus :

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

Cela permet une conversion simple :

<code class="language-csharp">using var jDoc = JsonDocument.Parse(jsonString);
var myObject = jDoc.RootElement.GetProperty("propertyName").Deserialize<MyObjectType>();</code>

.NET 5 et versions antérieures : une solution de contournement pratique

Pour les projets utilisant .NET 5 ou des versions antérieures, qui ne disposent pas de ces méthodes d'extension pratiques, une solution de contournement consiste à écrire le JsonElement dans un tampon d'octets, puis à le désérialiser à partir de ce tampon :

<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)
{
    return document.RootElement.ToObject<T>(options);
}</code>

Cette méthode évite la surcharge des conversions de chaînes ou de caractères, offrant une solution efficace pour les anciennes versions de .NET.

How to Efficiently Convert JsonElement to a .NET Object?

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