Heim >Backend-Entwicklung >C++ >Wie bleibt die Standardserialisierung erhalten, wenn ein benutzerdefinierter System.Text.Json JsonConverter verwendet wird?
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
DefaultConverterFactory
zum Anwenden benutzerdefinierter Konverter auf benutzerdefinierte Werttypen oder POCOs kann zu einem Stapelüberlauf führen. 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!