Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Knihovna System.Text.Json ve výchozím nastavení zdůrazňuje literálové, deterministické chování a zabraňuje jakémukoli odhadu nebo interpretaci jménem volajícího. Knihovna je záměrně navržena tímto způsobem pro zabezpečení a výkon. I když System.Text.Json je vysoce konfigurovatelný a jeho funkce lze použít k minimalizaci změn potřebných pro serializované typy, je důležité zvážit kompromisy mezi zpracováním existujících typů s co nejmenšími změnami a refaktoringovými typy, které umožňují idiomatickou a zabezpečenou serializaci.
Při migraci z BinaryFormatter do System.Text.Jsonje důležité si uvědomit následující chování a možnosti:
Ve výchozím nastavení nejsou pole serializována nebo deserializována pomocí nějaké metody
System.Text.Json, ale mohou být označeny pro serializaci. Alternativně je možné pečlivě nastavit,JsonSerializerOptions.IncludeFieldsabytruezahrnovala všechna veřejná pole pro serializované typy.JsonSerializerOptions options = new() { IncludeFields = true };Ve výchozím nastavení System.Text.Jsonignoruje privátní pole a vlastnosti. Použití neveřejného přístupového objektu u vlastnosti můžete povolit pomocí atributu
[JsonInclude]. Zahrnutí soukromých polí vyžaduje určitou nesouvisenou práci navíc.System.Text.Json nelze deserializovat pole nebo vlastnosti jen pro čtení, ale
[JsonConstructor]atribut lze použít k označení, že zadaný konstruktor by měl být použit k vytvoření instancí typu deserializace. Konstruktor může nastavit pole a vlastnosti jen pro čtení.Chcete-li přepsat výchozí chování serializace pro určitý typ, můžete psát vlastní převaděče.
Podporuje serializaci a deserializaci mnoha kolekcí, ale existují omezení. Podrobnosti o typech a kolekcích, které jsou podporovány pro serializaci a deserializaci, najdete v dokumentaci k podporovaným typům .
Za určitých podmínek podporuje serializaci a deserializaci vlastních obecných kolekcí.
Jiné typy bez předdefinované podpory jsou:
DataSet,DataTable,DBNullTimeZoneInfo, ,Type, .ValueTupleMůžete však napsat vlastní převaděč pro podporu těchto typů.Podporuje polymorfní hierarchii typů serializace a deserializace, kde byly typy explicitně optovány prostřednictvím atributu
[JsonDerivedType]nebo vlastního převaděče. Hierarchie otevřené dědičnosti nejsou podporovány a cyklický přechod s polymorfismu vyžaduje identifikátory typu diskriminátoru pro všechny známé odvozené typy.Atribut
[JsonIgnore]vlastnosti způsobí, že vlastnost bude vynechána z JSON během serializace.Chcete-li zachovat odkazy a zpracovat cyklické odkazy v
System.Text.Json, je nastavenaJsonSerializerOptions.ReferenceHandlernaReferenceHandler.Preservehodnotu .Serialization lze značně přizpůsobit pomocí vlastních kontraktů, odblokovat mnoho scénářů a současně minimalizovat změny serializovaných typů.