Yeni JsonSerializer kaynak oluşturucu aşırı yüklemeleri
Kaynak System.Text.Json
oluşturucu özelliği, veya JsonSerializerContextaracılığıyla JsonTypeInfo<T> önceden oluşturulmuş tür bilgilerini kabul eden yeni aşırı yüklemeler JsonSerializer ekledi. Bu aşırı yüklemeler, örnekleri alıp JsonSerializerOptions çalışma zamanı yansıması gerçekleştiren önceden var olan aşırı yüklemeler üzerinde performans iyileştirmesi sağlar. Bu parametre türlerinin tümü, geçirebileceğiniz null
başvuru türleridir. Aşağıdaki örnekte her iki yaklaşım için yöntem-imza desenleri gösterilmektedir:
Önceden var olan yansıma/JsonSerializerOptions
tabanlı aşırı yüklemeler:
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);
Yeni kaynak oluşturucu/JsonTypeInfo
/JsonSerializerContext
tabanlı aşırı yüklemeler:
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);
Önceki davranış
parametresinin JsonSerializerOptions değeri olarak geçirilen null
kodu yazabilir ve bu kod derlenip başarıyla çalıştırılabilir.
entity.Property(e => e.Value).HasConversion(v => JsonSerializer.Serialize(v,null), v => JsonSerializer.Deserialize(v, null));
Yeni davranış
.NET 6'daki yeni kaynak oluşturucu yöntemleri, parametresini JsonSerializerOptions geçirirseniz null
derleyici belirsizliğine neden olabilir. Örneğin, aşağıdaki hata iletisini görebilirsiniz:
Çağrı şu yöntemler veya özellikler arasında belirsiz: 'JsonSerializer.Serialize(TValue, JsonSerializerOptions?)' ve 'JsonSerializer.Serialize(TValue, JsonTypeInfo)
Sürüm kullanıma sunulmuştur
.NET 6
Hataya neden olan değişikliğin türü
Bu değişiklik kaynak uyumluluğunu etkileyebilir.
Değişiklik nedeni
Performans iyileştirmesi olarak seri hale getiriciye yeni aşırı yüklemeler eklendi. Daha fazla bilgi için bkz . Yeni System.Text.Json kaynak oluşturucuyu deneme.
Önerilen eylem
Kodunuzu, hedeflenen hedefe açık bir atama gerçekleştirme gibi hedeflenen aşırı yüklemeyi azaltacak şekilde güncelleştirin. Örneğin, Önceki davranış bölümündeki örneği aşağıdaki gibi değiştirebilirsiniz:
entity.Property(e => e.Value).HasConversion(v => JsonSerializer.Serialize(v, (JsonSerializerOptions)null), v => JsonSerializer.Deserialize(v, (JsonSerializerOptions)null));
Diğer geçici çözümler şunlardır:
- İsteğe bağlı parametresini
JsonSerializerOptions? options = null
atlar. - Adlandırılmış bağımsız değişkenleri kullanma.
Ancak, isteğe bağlı parametreleri atlayamaz veya bir lambda ifadesinde adlandırılmış bağımsız değişkenler kullanamazsınız.
Etkilenen API’ler
System.Text.Json.JsonSerializer Tüm yöntemler.