Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kitaplık, System.Text.Json meta veri özellik adlarını kaldıracak şekilde güncelleştirildi. Bu değişiklik, JSON belgelerinin başvuru koruma, polimorfizm ve meta veri özelliği doğrulaması bağlamında yorumlanma şeklini etkiler.
Sürüm kullanıma sunulmuştur
.NET 9
Önceki davranış
Daha önce meta System.Text.Json veri özellik adlarını kaldırmamıştı. Bu, meta veri özelliği doğrulamasını atlayan geçersiz özellik adlarının kabul edildiğine yol açabilir.
Örneğin, aşağıdaki kod ilk çağrıda başarılı olur ancak ikinci çağrıda bir özel durum oluşturur:
JsonSerializerOptions options = new() { ReferenceHandler = ReferenceHandler.Preserve };
JsonSerializer.Deserialize<MyPoco>("""{"\u0024invalid" : 42 }""", options);
JsonSerializer.Deserialize<MyPoco>("""{"$invalid" : 42 }""", options);
record MyPoco;
Özetsiz davranış, burada görüldüğü gibi adları kaçış gerektiren meta veri özelliklerini yuvarlarken çok biçimlilik sorunlarına da neden olabilir:
string json = JsonSerializer.Serialize<Base>(new Derived());
Console.WriteLine(json); // {"categor\u00EDa":"derived"}
Console.WriteLine(JsonSerializer.Deserialize<Base>(json) is Derived); // False
[JsonPolymorphic(TypeDiscriminatorPropertyName = "categoría")]
[JsonDerivedType(typeof(Derived), "derived")]
public record Base;
public record Derived : Base;
Yeni davranış
System.Text.Json şimdi meta veri özellik adlarını kaldırıyor. Bu yeni davranış, polimorfik seri durumdan çıkarma örneğindeki Console.WriteLine(JsonSerializer.Deserialize<Base>(json) is Derived); satırının artık true döndürmesi ve geçersiz özellik adlarının aşağıdaki özel durumla doğru şekilde seri durumdan çıkarılamaması anlamına gelir:
Unhandled exception. System.Text.Json.JsonException: Properties that start with '$' are not allowed in types that support metadata.
Kesinti yaratan değişiklik türü
Bu değişiklik davranışsal bir değişikliktir.
Değişiklik nedeni
Değişiklik, meta veri özellik adlarının doğru şekilde işlenmesini sağlayarak, meta veri özelliği doğrulamasının atlanmasını önleyip doğruluğu ve güvenilirliği artırır. Daha fazla ayrıntı için bildirilen soruna bakın.
Önerilen eylem
Meta veri özelliği doğrulamasını atlamak için kaçış kullanmaktan kaçının. Bunun yerine, meta veri özellikleriyle çakışmayan özellik adlarını seçin.