Bei der Entwicklung eines benutzerdefinierten JSON-Konverters für System.Text.Json kann es vorkommen, dass die Standardserialisierung in der Methode Write
ausreichend ist. Um dies zu erreichen, können mehrere Ansätze in Betracht gezogen werden.
Wenn das Attribut [JsonConverter]
auf eine bestimmte Eigenschaft angewendet wird, generiert der Aufruf von JsonSerializer.Serialize(writer, person, options);
eine Standardserialisierung für diese Eigenschaft.
In der Write
-Methode eines benutzerdefinierten Konverters können Sie eine Kopie des übergebenen JsonSerializerOptions
erstellen, den benutzerdefinierten Konverter aus der Converters
-Liste der Kopie entfernen und die geänderten Optionen an JsonSerializer.Serialize<T>(Utf8JsonWriter, T, JsonSerializerOptions);
Medium übergeben. Beachten Sie, dass dieser Ansatz bei der Arbeit mit rekursiven Typen Einschränkungen aufweist.
Sie können die Erstellung eines benutzerdefinierten Konverters steuern, indem Sie JsonConverterFactory
als Basisklasse für einen benutzerdefinierten Konverter definieren. In der CreateConverter
-Methode der Factory können Sie ein verschachteltes DefaultConverter
erstellen, das geänderte Optionen für die Serialisierung und Deserialisierung verwendet.
Hinweis: Diese Methode kann zu einem Stapelüberlauf führen.
Wenn JsonConverterFactory
auf einen benutzerdefinierten Werttyp oder POCO angewendet wird, kann es während der Serialisierung zu einem Stapelüberlauf kommen.
Das folgende modifizierte PersonConverter
zeigt, wie die Standardserialisierung mithilfe einer benutzerdefinierten Konverterfabrik implementiert wird:
public sealed class PersonConverter : DefaultConverterFactory<Person> { ... // 使用修改后的选项实现Read和Write方法 public override bool CanConvert(Type typeToConvert) => typeof(Person) == typeToConvert; public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) => new DefaultConverter(options, this); }
In der Basisklasse DefaultConverterFactory
wird die Erweiterungsmethode CopyAndRemoveConverter
verwendet, um eine modifizierte Kopie der Option zu erstellen, mit Ausnahme benutzerdefinierter Konverter.
Diese Methode bietet mehr Flexibilität als die Verwendung unterschiedlicher JsonSerializerOptions
für die Serialisierung und Deserialisierung.
Das obige ist der detaillierte Inhalt vonWie nutzt man die standardmäßige System.Text.Json-Serialisierung in einem benutzerdefinierten JSON-Konverter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!