Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dodana funkcja generatora System.Text.Json
źródła wprowadziła nowe przeciążenia do JsonSerializer, które akceptują wstępnie wygenerowane informacje o typie za pośrednictwem JsonTypeInfo<T> lub JsonSerializerContext. Te przeciążenia zapewniają optymalizację wydajności w porównaniu do istniejących przeciążeń, które przyjmują instancje JsonSerializerOptions i wykonują odbicie w czasie wykonywania. Wszystkie te typy parametrów to typy referencyjne, dla których można przekazać null
. W poniższym przykładzie przedstawiono wzorce sygnatur metody dla obu metod:
Wstępnie istniejące przeciążenia odbicia/JsonSerializerOptions
oparte na:
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);
Nowe przeciążenia generatora/JsonTypeInfo
/JsonSerializerContext
opartego na źródle:
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);
Poprzednie zachowanie
Możesz napisać kod, który przekazuje null
jako wartość dla parametru JsonSerializerOptions, a następnie jest pomyślnie skompilowany i uruchomiony.
entity.Property(e => e.Value).HasConversion(v => JsonSerializer.Serialize(v,null), v => JsonSerializer.Deserialize(v, null));
Nowe zachowanie
Nowe metody generatora źródła na platformie .NET 6 mogą wprowadzać niejednoznaczność kompilatora w przypadku przekazania null
dla parametru JsonSerializerOptions. Na przykład może zostać wyświetlony następujący komunikat o błędzie:
Wywołanie jest niejednoznaczne między następującymi metodami lub właściwościami: 'JsonSerializer.Serialize(TValue, JsonSerializerOptions?)' oraz 'JsonSerializer.Serialize(TValue, JsonTypeInfo)
Wersja wprowadzona
.NET 6
Typ zmiany przełamującej
Ta zmiana może mieć wpływ na zgodność źródła .
Przyczyna zmiany
Nowe przeciążenia zostały dodane do serializatora w ramach optymalizacji wydajności. Aby uzyskać więcej informacji, zobacz Try the new System.Text.Json source generator (Wypróbuj nowy generator źródła System.Text.Json).
Zalecana akcja
Zaktualizuj kod w taki sposób, aby rozbroić zamierzone przeciążenie, takie jak wykonywanie jawnego rzutowania na zamierzony cel. Na przykład możesz zmienić przykład w sekcji Poprzednie zachowanie w następujący sposób:
entity.Property(e => e.Value).HasConversion(v => JsonSerializer.Serialize(v, (JsonSerializerOptions)null), v => JsonSerializer.Deserialize(v, (JsonSerializerOptions)null));
Inne obejścia obejmują:
- Pominięcie opcjonalnego parametru
JsonSerializerOptions? options = null
. - Używanie nazwanych argumentów.
Nie można jednak pominąć parametrów opcjonalnych ani użyć nazwanych argumentów w wyrażeniu lambda.
Interfejsy API, których dotyczy problem
Wszystkie System.Text.Json.JsonSerializer metody.