Migreren naar System.Text.Json (JSON)
De System.Text.Json
bibliotheek is standaard ingesteld op het benadrukken van letterlijk, deterministisch gedrag en vermijdt eventuele schattingen of interpretatie namens de beller. De bibliotheek is op deze manier ontworpen voor beveiliging en prestaties. Hoewel System.Text.Json
zeer configureerbaar is en de functies ervan kunnen worden gebruikt om wijzigingen die nodig zijn voor geserialiseerde typen te minimaliseren, is het belangrijk om rekening te houden met de afwegingen tussen het verwerken van bestaande typen met zo weinig mogelijk wijzigingen versus het herstructureren van typen om idiomatische en veilige serialisatie mogelijk te maken.
Bij het migreren van BinaryFormatter naar , System.Text.Json
is het van cruciaal belang om rekening te houden met het volgende gedrag en de volgende opties:
Standaard worden velden niet geserialiseerd of gedeserialiseerd door
System.Text.Json
, maar ze kunnen worden geannoteerd voor serialisatie. U kunt ookJsonSerializerOptions.IncludeFields
voorzichtig worden ingesteld dattrue
alle openbare velden worden opgenomen voor de typen die worden geserialiseerd.JsonSerializerOptions options = new() { IncludeFields = true };
System.Text.Json Standaard worden privévelden en -eigenschappen genegeerd. U kunt het gebruik van een niet-openbare toegangsbeheer voor een eigenschap inschakelen met behulp van het
[JsonInclude]
kenmerk. Voor het opnemen van privévelden is een aantal niet-triviale extra werkzaamheden vereist.System.Text.Json kan alleen-lezenvelden of -eigenschappen niet deserialiseren, maar het
[JsonConstructor]
kenmerk kan worden gebruikt om aan te geven dat de opgegeven constructor moet worden gebruikt voor het maken van exemplaren van het type voor deserialisatie. De constructor kan de alleen-lezen velden en eigenschappen instellen.Als u het standaardserialisatiegedrag voor een specifiek type wilt overschrijven, kunt u aangepaste conversieprogramma's schrijven.
Het ondersteunt serialisatie en deserialisatie van veel verzamelingen, maar er zijn beperkingen. Zie de ondersteunde typen documentatie voor meer informatie over welke typen en verzamelingen worden ondersteund voor serialisatie en deserialisatie.
Onder bepaalde voorwaardenondersteunt het serialisatie en deserialisatie van aangepaste algemene verzamelingen.
Andere typen zonder ingebouwde ondersteuning zijn:
DataSet
,DataTable
,DBNull
,TimeZoneInfo
, , ,Type
.ValueTuple
U kunt echter een aangepast conversieprogramma schrijven om deze typen te ondersteunen.Het ondersteunt serialisatie en deserialisatie van polymorfe typen waar de typen expliciet zijn aangemeld via het
[JsonDerivedType]
kenmerk of aangepaste conversieprogramma. Open overnamehiërarchieën worden niet ondersteund en retourneert met polymorfisme vereist typediscriminerende id's voor alle bekende afgeleide typen.Het kenmerk
[JsonIgnore]
van een eigenschap zorgt ervoor dat de eigenschap tijdens de serialisatie wordt weggelaten uit de JSON.Als u verwijzingen wilt behouden en kringverwijzingen wilt
System.Text.Json
verwerken, stelt u deze inJsonSerializerOptions.ReferenceHandler
opReferenceHandler.Preserve
.Serialization kan uitgebreid worden aangepast met aangepaste contracten, waardoor veel scenario's worden gedeblokkeerd terwijl wijzigingen in geserialiseerde typen worden geminimaliseerd.