In .NET Core 3 und höher eine Methode zum Konvertieren von JsonElement in ein Objekt
In diesem Artikel wird erläutert, wie Sie System.Text.Json
mithilfe von JsonElement
in .NET Core 3 und höher in ein Objekt konvertieren. System.Text.Json
ist die neue JSON-Verarbeitungsbibliothek in .NET Core 3.0 und enthält kein Äquivalent der Json.NET
-Methode in ToObject()
, die die Konvertierung von JToken
in eine Klasse ermöglicht.
.NET 6 und höher:
Ab .NET 6 bietet JsonSerializer
Erweiterungsmethoden zur direkten Deserialisierung von JsonElement
oder 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>
Mit diesen Methoden können Sie Objekte von JsonElement
einfach deserialisieren:
<code class="language-csharp">var myClass = jDoc.RootElement.GetProperty("SomeProperty").Deserialize<MyClass>();</code>
.NET 5 und früher:
In früheren Versionen von .NET waren diese Methoden nicht verfügbar. Die Problemumgehung besteht darin, den JSON in einen Zwischenbyte-Puffer zu schreiben:
<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>
Diese Methode ist leistungsfähiger als die vorherige Konvertierung von JsonElement
in eine Zeichenfolge.
Hinweis:
JsonDocument
: JsonDocument
verwendet gepoolten Speicher, daher muss er ordnungsgemäß freigegeben werden (es wird empfohlen, die using
-Anweisung zu verwenden). JsonNode
: Ähnliche Methoden gibt es für den veränderlichen JSON-Dokumentknoten JsonNode
. Das obige ist der detaillierte Inhalt vonWie konvertiere ich ein JsonElement in ein Objekt in .NETs System.Text.Json?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!