Aracılığıyla paylaş


System.Text.Json meta veri okuyucusu artık meta veri özellik adlarını kaldırıyor

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.

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.

Etkilenen API'ler