Heim >Backend-Entwicklung >C++ >Wie bleibt die Standardserialisierung erhalten, wenn ein benutzerdefinierter System.Text.Json JsonConverter verwendet wird?

Wie bleibt die Standardserialisierung erhalten, wenn ein benutzerdefinierter System.Text.Json JsonConverter verwendet wird?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-10 10:55:40196Durchsuche

How to Preserve Default Serialization When Using a Custom System.Text.Json JsonConverter?

Standardserialisierung im benutzerdefinierten System.Text.Json JsonConverter implementieren

Wenn Sie ein benutzerdefiniertes System.Text.Json.JsonConverter<T> implementieren, um das Datenmodell zu aktualisieren, müssen Sie möglicherweise die Write()-Methode überschreiben. In manchen Fällen möchten Sie jedoch möglicherweise das standardmäßige Serialisierungsverhalten beibehalten. Um dies zu erreichen, können Sie die folgenden Strategien anwenden.

1. JsonConverter auf Eigenschaften angewendet

Wenn ein benutzerdefinierter Konverter auf eine Eigenschaft angewendet wird, wird durch einfaches Aufrufen von Write() innerhalb der JsonSerializer.Serialize(writer, person, options);-Methode die Standardserialisierung generiert.

2. Konverter zur Konverter-Sammlung hinzugefügt

In diesem Fall können Sie die Write()-Sammlung in der Converters-Methode ändern, indem Sie:

<code class="language-csharp">public override void Write(Utf8JsonWriter writer, Person person, JsonSerializerOptions options)
{
    // 复制传入的选项并移除自定义转换器。
    var modifiedOptions = options.CopyAndRemoveConverter(typeof(PersonConverter));
    JsonSerializer.Serialize(writer, person, modifiedOptions);
}</code>

3. JsonConverter wird auf benutzerdefinierte Werttypen oder POCOs angewendet

Derzeit gibt es keine integrierte Methode zum Generieren einer Standardserialisierung für dieses Szenario.

4. Von JsonConverterFactory zurückgegebener Konverter

Um die Verwendung einer Konverterfabrik in einer Konverterliste zu deaktivieren, sollten Sie erwägen, einen JsonConverterFactory zu erstellen, der einen benutzerdefinierten Konverter zurückgibt, der die Serialisierung überspringt, wenn die Fabrik angewendet wird.

Verbesserte Implementierung

Im bereitgestellten Beispiel verwendet die verbesserte Implementierung DefaultConverterFactory<T>. Mit dieser Klasse können Sie kopierte Optionen bequem in hergestellten Konvertern zwischenspeichern. Die vollständige Implementierung sieht so aus:

<code class="language-csharp">public sealed class PersonConverter : DefaultConverterFactory<Person>
{
    // ... 原问题的现有代码 ...
}

public abstract class DefaultConverterFactory<T> : JsonConverterFactory
{
    // ... 接受的答案中的现有代码 ...
}

public static class JsonSerializerExtensions
{
    // ... 接受的答案中的现有代码 ...
}</code>

Weitere Anweisungen

  • Die Verwendung von DefaultConverterFactory zum Anwenden benutzerdefinierter Konverter auf benutzerdefinierte Werttypen oder POCOs kann zu einem Stapelüberlauf führen.
  • Der geänderte Code ermöglicht im bereitgestellten Beispiel eine korrekte Standardserialisierung.

Das obige ist der detaillierte Inhalt vonWie bleibt die Standardserialisierung erhalten, wenn ein benutzerdefinierter System.Text.Json JsonConverter verwendet wird?. 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