Heim >Backend-Entwicklung >C++ >Wie deserialisiere ich JSON-Elemente in Objekte in System.Text.Json?

Wie deserialisiere ich JSON-Elemente in Objekte in System.Text.Json?

Linda Hamilton
Linda HamiltonOriginal
2025-01-08 15:42:401013Durchsuche

How to Deserialize JSON Elements to Objects in System.Text.Json?

Deserialisierung von System.Text.Json-Elementen

In Newtonsoft.Json wird die Methode ToObject() normalerweise zum Konvertieren von JSON-Tokens in stark typisierte Objekte verwendet. Allerdings ist in System.Text.Json keine gleichwertige Methode verfügbar.

Lösung für .NET 6

In .NET 6 und höher wurden Erweiterungsmethoden zu JsonSerializer hinzugefügt, um Objekte direkt von JsonElement oder JsonDocument zu deserialisieren. Dies ermöglicht die folgende Syntax:

<code class="language-csharp">using var jDoc = JsonDocument.Parse(str);
var myClass = jDoc.RootElement.GetProperty("SomeProperty").Deserialize<SomeClass>();</code>

Problemumgehung für .NET 5 und frühere Versionen

Für .NET 5 und früher kann eine Problemumgehung durch Schreiben in einen Zwischenbyte-Puffer verwendet werden, um die Leistung zu verbessern:

<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)
{
    if (document == null)
        throw new ArgumentNullException(nameof(document));
    return document.RootElement.ToObject<T>(options);
}</code>

Anleitung:

  • Denken Sie daran, die JsonDocument-Anweisung für using zu verwenden, da diese freigabefähig ist.
  • Diese Problemumgehung ist in .NET Core 3.1 und höher verfügbar.

Das obige ist der detaillierte Inhalt vonWie deserialisiere ich JSON-Elemente in Objekte in System.Text.Json?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn