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.
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!