Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 33737|Odpowiedź: 2

[Źródło] Newtonsoft.Json ignoruje funkcję DataContract

[Skopiuj link]
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 AppDomains
Następny:. Najszybszy komponent do mapowania obiektów OOM w .NET, Tiny Mapper, w praktyce projektowej
Opublikowano 01.06.2018 13:20:10 |
Określ, czy ciąg json jest obiektem czy tablicą
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

switch (s.Type.ToString())
                {
                    przypadek "Obiekt":
                        przerwę;
                    przypadek "Array":
                        przerwę;
                    Domyślnie:
                        przerwę;
                }
Opublikowano 21.08.2020 11:52:32 |
Wspieraj, właściciel jest mistrzem w proszeniu o uda
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com