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

Comment convertir JsonElement en un objet fortement typé dans System.Text.Json ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-08 15:37:461025parcourir

How to Convert JsonElement to a Strongly-Typed Object in System.Text.Json?

Méthode équivalente ToObject de System.Text.Json.JsonElement

Concept

Dans .NET Core 3, la bibliothèque Json.NET fournit la méthode ToObject, permettant de convertir des objets JToken en classes fortement typées. Cet article explore la méthode équivalente de désérialisation des objets JsonElement dans System.Text.Json.

Solution

Dans .NET 6 et supérieur :

JsonSerializer a ajouté des méthodes d'extension pour désérialiser directement à partir des objets JsonElement et JsonDocument :

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

Dans .NET 5 et versions antérieures :

Il existe une solution de contournement qui 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);
}</code>

Exemple

<code class="language-csharp">var str = ""; // 一些 JSON 字符串
var jDoc = JsonDocument.Parse(str);
var myClass = jDoc.RootElement.GetProperty("SomeProperty").Deserialize<SomeClass>();</code>

Attention

  • Lâchez l'objet JsonDocument pour libérer des ressources mémoire.
  • Des méthodes d'extension ont été ajoutées à JsonNode dans .NET 6 pour une fonctionnalité de désérialisation similaire.
  • La solution de contournement fonctionne mieux car elle évite les conversions de chaînes inutiles.

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