Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A System.Text.Json kódtár frissült a metaadattulajdonságok nevének karaktermegfejtésére. Ez a változás befolyásolja a JSON-dokumentumok értelmezését a hivatkozásmegőrzés, a polimorfizmus és a metaadattulajdonság-ellenőrzés kontextusában.
Bevezetett verzió
.NET 9
Előző viselkedés
Korábban System.Text.Json nem oldotta ki a metaadat-tulajdonságneveket. Ez érvénytelen tulajdonságnevek elfogadását eredményezheti, ami megkerülheti a metaadatok tulajdonságérvényesítését.
Az alábbi kód például sikeres lesz az első hívásban, de kivételt jelez a második hívásban:
JsonSerializerOptions options = new() { ReferenceHandler = ReferenceHandler.Preserve };
JsonSerializer.Deserialize<MyPoco>("""{"\u0024invalid" : 42 }""", options);
JsonSerializer.Deserialize<MyPoco>("""{"$invalid" : 42 }""", options);
record MyPoco;
A feloldó viselkedés polimorfizmusi problémákat is okozhat a metaadatok olyan tulajdonságainak kerekítésekor, amelyeknek a neve el kell menekülni, ahogy az itt látható:
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;
Új viselkedés
System.Text.Json mostantól feloldja a metaadatok tulajdonságneveit. Ez az új viselkedés azt jelenti, hogy a polimorf deszerializálási példában szereplő sor Console.WriteLine(JsonSerializer.Deserialize<Base>(json) is Derived); most visszatér true, és az érvénytelen tulajdonságnevek helyesen nem deszerializálnak a következő kivétellel:
Unhandled exception. System.Text.Json.JsonException: Properties that start with '$' are not allowed in types that support metadata.
A kompatibilitástörő változás típusa
Ez a változás viselkedésbeli változás.
A változás oka
A módosítás javítja a helyességet és a megbízhatóságot azáltal, hogy biztosítja a metaadat-tulajdonságnevek megfelelő lefejezését, megakadályozva a metaadatok tulajdonságérvényesítésének megkerülését. További részletekért tekintse meg a jelentett problémát.
Javasolt művelet
Kerülje a menekülést a metaadatok tulajdonságérvényesítésének megkerüléséhez. Ehelyett válasszon olyan tulajdonságneveket, amelyek nem ütköznek a metaadatok tulajdonságaival.