|
|
Zveřejněno 30.05.2018 16:50:17
|
|
|
|

Newtonsoft.JsonJak asi víte, běžně používané nástroje pro serializaci a deserializaci v JSONu
DataContractAttributeSpecifikuje tento typ pro definování nebo implementaci datové smlouvy, kterou může serializovat serializátor, například DataContractSerializer. Aby byl typ serializovatelný, musí autor typu definovat datovou smlouvu pro jeho typ.
narazil na obtížný problém,Mateřská třída má funkci [DataContract] a podtřída dědí třídu rodiče a všechny atributy této podtřídy musí být serializovány a deserializovány pomocí atributu [DataMember]Protože nadřazená třída je zapouzdřené DLL někoho jiného, funkce [DataContract] v nadřazené třídě nemůže být smazána!
Test je následující: Třída Test1 má funkci [DataContract], pokud atribut nepřidá funkci [DataMember], způsobí selhání serializace a deserializace, jak je znázorněno na obrázku níže:
Anotovali jsme funkci [DataContract] třídy Test1 a zjistili jsme, že ji lze normálně serializovat a deserializovat, a to následovně:
Existuje nějaké pokročilé využití Newtonsoft.Json, které by tuto funkci ignorovalo? Odpověď je ano!
Stačí použít vlastnost OptOut v Json.Net. Bude mít přednost před DataContract.
// Abstrakt: Všichni veřejní členové jsou ve výchozím nastavení serializováni. Členy lze vyloučit pomocí Newtonsoft.Json.JsonIgnoreAttribute nebo System.NonSerializedAttribute. Toto je výchozí vzor serializace členů. OptOut = 0, // Abstrakt: Pouze členové označení Newtonsoft.Json.JsonPropertyAttribute nebo System.Runtime.Serialization.DataMemberAttribute je serializován. Tento režim serializace členů lze také nastavit tagováním třída s atributem System.Runtime.Serialization.DataContractAttribute. OptIn = 1, // Abstrakt: Všechna veřejná i soukromá pole jsou serializována. Členy lze vyloučit pomocí Newtonsoft.Json.JsonIgnoreAttribute nebo System.NonSerializedAttribute. Tento vzor serializace členů je také v pořádku Nastavte to označením třídy pomocí System.SerializableAttribute a nastavením atributu IgnoreSerializableAttribute Nastavte Newtonsoft.Json.Serialization.DefaultContractResolver na false. Pole = 2
Testovací kód:
|
Předchozí:Monitor AppDomainsDalší:. Nejrychlejší komponenta pro mapování objektů v OOM v .NET, Tiny Mapper, v projektové praxi
|