Migrera till System.Text.Json (JSON)
Biblioteket System.Text.Json
betonar som standard literalt, deterministiskt beteende och undviker gissningar eller tolkningar för anroparens räkning. Biblioteket är avsiktligt utformat på det här sättet för säkerhet och prestanda. Även om System.Text.Json
det är mycket konfigurerbart och dess funktioner kan användas för att minimera ändringar som behövs för serialiserade typer, är det viktigt att överväga kompromisserna mellan att hantera befintliga typer med så få ändringar som möjligt jämfört med refaktoriseringstyper för att aktivera idiomatiska och säkra serialization.
När du migrerar från BinaryFormatter till System.Text.Json
är det viktigt att notera följande beteenden och alternativ:
Som standard serialiseras inte fält eller deserialiseras av
System.Text.Json
, men de kan kommenteras för serialization. Du kan ocksåJsonSerializerOptions.IncludeFields
försiktigt ange till atttrue
inkludera alla offentliga fält för de typer som serialiseras.JsonSerializerOptions options = new() { IncludeFields = true };
Som standard System.Text.Jsonignorerar privata fält och egenskaper. Du kan aktivera användning av en icke-offentlig accessor på en egenskap med hjälp av attributet
[JsonInclude]
. Att inkludera privata fält kräver lite icke-trivialt extra arbete.System.Text.Json kan inte deserialisera skrivskyddade fält eller egenskaper, men
[JsonConstructor]
attributet kan användas för att ange att den angivna konstruktorn ska användas för att skapa instanser av typen vid deserialisering. Konstruktorn kan ange skrivskyddade fält och egenskaper.Om du vill åsidosätta standardbeteendet serialization för en viss typ kan du skriva anpassade konverterare.
Det stöder serialization och deserialisering av många samlingar, men det finns begränsningar. Mer information om vilka typer och samlingar som stöds för serialization och deserialisering finns i typer som stöds dokumentationen.
Under vissa förhållanden stöder serialization och deserialiseras anpassade generiska samlingar.
Andra typer utan inbyggt stöd är:
DataSet
,DataTable
,DBNull
,TimeZoneInfo
,Type
, .ValueTuple
Du kan dock skriva en anpassad konverterare för att stödja dessa typer.Den stöder polymorfisk typhierarki serialization och deserialisering där typerna uttryckligen har valts via attributet eller den
[JsonDerivedType]
anpassade konverteraren. Öppna arvshierarkier stöds inte, och rund-tripping med polymorfism kräver typdiskriminerande identifierare för alla kända härledda typer.Attributet
[JsonIgnore]
för en egenskap gör att egenskapen utelämnas från JSON under serialization.Om du vill bevara referenser och hantera cirkelreferenser i
System.Text.Json
anger duJsonSerializerOptions.ReferenceHandler
tillReferenceHandler.Preserve
.Serialization kan anpassas i stor utsträckning med anpassade kontrakt, vilket avblockerar många scenarier samtidigt som ändringar av serialiserade typer minimeras.