Dela via


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 krävs för serialiserade typer, är det viktigt att överväga kompromisserna mellan hantering av befintliga typer med så få ändringar som möjligt jämfört med refaktoriseringstyper för att möjliggöra idiomatisk och säker serialisering.

När du migrerar från BinaryFormatter till System.Text.Jsonär det viktigt att notera följande beteenden och alternativ:

  • Som standard serialiseras eller deserialiseras fälten inte av System.Text.Json, men de kan kommenteras för serialisering. Du kan också JsonSerializerOptions.IncludeFields försiktigt ange till att true 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 standard serialiseringsbeteendet för en viss typ kan du skriva anpassade konverterare.

  • Den stöder serialisering och deserialisering av många samlingar, men det finns begränsningar. Mer information om vilka typer och samlingar som stöds för serialisering och deserialisering finns i dokumentationen för typer som stöds .

  • Under vissa förhållanden stöder den serialisering och deserialisering av 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 typhierarkiserialisering 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] på en egenskap gör att egenskapen utelämnas från JSON under serialiseringen.

  • Om du vill bevara referenser och hantera cirkelreferenser i System.Text.Jsonanger du JsonSerializerOptions.ReferenceHandler till ReferenceHandler.Preserve.

  • Serialization kan anpassas i stor utsträckning med anpassade kontrakt, vilket avblockerar många scenarier samtidigt som ändringar av serialiserade typer minimeras.