Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Feature des System.Text.Json
Quellgenerators hat neue Überladungen zu JsonSerializer hinzugefügt, die vorab generierte Typinformationen über JsonTypeInfo<T> oder JsonSerializerContext akzeptieren. Diese Überladungen erzielen eine Leistungsoptimierung gegenüber bereits vorhandenen Überladungen, die JsonSerializerOptions-Instanzen akzeptieren und eine Reflexion zur Laufzeit ausführen. Alle diese Parametertypen sind Referenztypen, für die Sie übergeben null
können. Das folgende Beispiel zeigt die Methodensignaturmuster für beide Ansätze:
Bereits vorhandene auf Reflexion/JsonSerializerOptions
basierende Überladungen:
public static string JsonSerializer.Serialize<T>(T value, JsonSerializerOptions? options = null);
public static string JsonSerializer.Serialize(object value, Type type, JsonSerializerOptions? options = null);
public static T JsonSerializer.Deserialize<T>(string json, JsonSerializerOptions? options = null);
public static T JsonSerializer.Deserialize(string json, Type type, JsonSerializerOptions? options = null);
Neue auf dem Quellgenerator/JsonTypeInfo
/JsonSerializerContext
basierende Überladungen:
public static string JsonSerializer.Serialize<T>(T value, JsonTypeInfo<T> jsonTypeInfo);
public static string JsonSerializer.Serialize(object value, Type type, JsonSerializerContext jsonSerializerContext);
public static T JsonSerializer.Deserialize<T>(string json, JsonTypeInfo<T> jsonTypeInfo);
public static object JsonSerializer.Deserialize(string json, Type type, JsonSerializerContext jsonSerializerContext);
Vorheriges Verhalten
Sie konnten Code schreiben, der null
als Wert für den Parameter JsonSerializerOptions übergab und erfolgreich kompiliert und ausgeführt wurde.
entity.Property(e => e.Value).HasConversion(v => JsonSerializer.Serialize(v,null), v => JsonSerializer.Deserialize(v, null));
Neues Verhalten
Die neuen Source-Generator-Methoden in .NET 6 können Kompiliererzweideutigkeit einführen, wenn Sie null
für den JsonSerializerOptions Parameter übergeben. So wird beispielsweise die folgende Fehlermeldung angezeigt:
Der Aufruf ist zwischen den folgenden Methoden oder Eigenschaften mehrdeutig: 'JsonSerializer.Serialize(TValue, JsonSerializerOptions?)' und 'JsonSerializer.Serialize(TValue, JsonTypeInfo)
Eingeführte Version
.NET 6
Art der einschneidenden Änderung
Diese Änderung kann sich auf die Quellkompatibilität auswirken.
Grund für Änderung
Dem Serialisierer wurden neue Überladungen als Leistungsoptimierung hinzugefügt. Weitere Informationen finden Sie unter "Testen des neuen System.Text.Json-Quellgenerators".
Empfohlene Aktion
Aktualisieren Sie Ihren Code so, dass die beabsichtigte Überladung eindeutig ist, z. B. indem Sie eine explizite Umwandlung in das beabsichtigte Ziel durchführen. Sie können z. B. das Beispiel im Abschnitt "Vorheriges Verhalten " wie folgt ändern:
entity.Property(e => e.Value).HasConversion(v => JsonSerializer.Serialize(v, (JsonSerializerOptions)null), v => JsonSerializer.Deserialize(v, (JsonSerializerOptions)null));
Weitere Problemumgehungen:
- Auslassen des optionalen Parameters
JsonSerializerOptions? options = null
. - Verwenden von benannten Argumenten.
Sie können jedoch keine optionalen Parameter weglassen oder benannte Argumente in einem Lambda-Ausdruck verwenden.
Betroffene APIs
Alle System.Text.Json.JsonSerializer Methoden.