|
|
Opublikowano 30.05.2018 16:50:17
|
|
|
|

Newtonsoft.JsonJak pewnie wiesz, często używane narzędzia do serializacji i deserializacji JSON
DataContractAttributeOkreśla ten typ, aby zdefiniować lub zaimplementować kontrakt danych, który może być serializowany przez serializer, taki jak DataContractSerializer. Aby typ był serializowalny, autor typu musi zdefiniować kontrakt danych dla jego typu.
napotkał trudny problem,Klasa nadrzędna posiada funkcję [DataContract], a klasa potomna dziedziczy klasę nadrzędną, a wszystkie atrybuty tej podklasy muszą być serializowane i deserializowane z atrybutem [DataMember]Ponieważ klasa nadrzędna jest czyimś zamkniętym dll, funkcja [DataContract] klasy nadrzędnej nie może zostać usunięta!
Test wygląda następująco: klasa Test1 posiada funkcję [DataContract], jeśli atrybut nie doda funkcji [DataMember], spowoduje niepowodzenie serializacji i deserializacji, jak pokazano na poniższym rysunku:
Oznaczyliśmy funkcję [DataContract] klasy Test1 i odkryliśmy, że można ją normalnie serializować i deserializować, w następujący sposób:
Czy istnieje jakieś zaawansowane zastosowanie Newtonsoft.json, które pozwala zignorować tę funkcję? Odpowiedź brzmi: tak!
Po prostu użyj właściwości OptOut w Json.Net. Będzie miał pierwszeństwo przed DataContract.
// Streszczenie: Wszystkie publiczne członki są domyślnie serializowane. Członkowie mogą być wykluczeni za pomocą Newtonsoft.Json.JsonIgnoreAttribute lub System.NonSerializedAttribute. Jest to domyślny wzorzec serializacji członków. OptOut = 0, // Streszczenie: Tylko członkowie oznaczoni jako Newtonsoft.Json.JsonPropertyAttribute lub System.Runtime.Serialization.DataMemberAttribute jest serializowany. Ten tryb serializacji członków można również ustawić przez tagowanie klasa z atrybutem System.Runtime.Serialization.DataContractAttribute. OptIn = 1, // Streszczenie: Wszystkie pola publiczne i prywatne są serializowane. Członkowie mogą być wykluczeni za pomocą Newtonsoft.Json.JsonIgnoreAttribute lub System.NonSerializedAttribute. Ten wzorzec serializacji członków również działa dobrze Ustaw to, oznaczając klasę System.SerializableAttribute i ustawiając IgnoreSerializableAttribute Ustaw Newtonsoft.Json.Serialization.DefaultContractResolver na false. Pola = 2
Kod testowy:
|
Poprzedni:Monitor AppDomainsNastępny:. Najszybszy komponent do mapowania obiektów OOM w .NET, Tiny Mapper, w praktyce projektowej
|