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 :
JsonDocument
: JsonDocument
utilise la mémoire poolée, elle doit donc être libérée correctement (il est recommandé d'utiliser l'instruction using
). JsonNode
: Des méthodes similaires existent pour le nœud de document JSON mutable JsonNode
. 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!