JsonElement effizient in ein .NET-Objekt konvertieren
System.Text.Json, eingeführt in .NET Core 3.0, bietet eine leistungsstarke JSON-Verarbeitungslösung. Im Gegensatz zu Json.NET fehlte jedoch bis .NET 6 ein direktes Äquivalent zur ToObject
-Methode zur bequemen Konvertierung von JsonElement
in ein .NET-Objekt.
.NET 6 und höher: Vereinfachte Konvertierung
.NET 6 und spätere Versionen bieten integrierte Erweiterungsmethoden in JsonSerializer
, die den Prozess optimieren:
<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>
Dies ermöglicht eine unkomplizierte Konvertierung:
<code class="language-csharp">using var jDoc = JsonDocument.Parse(jsonString); var myObject = jDoc.RootElement.GetProperty("propertyName").Deserialize<MyObjectType>();</code>
.NET 5 und früher: Eine praktische Problemumgehung
Für Projekte mit .NET 5 oder früheren Versionen, denen diese praktischen Erweiterungsmethoden fehlen, besteht eine Problemumgehung darin, JsonElement
in einen Bytepuffer zu schreiben und dann aus diesem Puffer zu deserialisieren:
<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>
Diese Methode vermeidet den Aufwand für String- oder Zeichenspannenkonvertierungen und bietet eine effiziente Lösung für ältere .NET-Versionen.
Das obige ist der detaillierte Inhalt vonWie konvertiert man JsonElement effizient in ein .NET-Objekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!