Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 33737|Απάντηση: 2

[Πηγή] Το Newtonsoft.Json αγνοεί τη δυνατότητα DataContract

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 30/5/2018 4:50:17 μ.μ. | | | |
Newtonsoft.JsonΌπως ίσως γνωρίζετε, τα εργαλεία σειριοποίησης και αποσειριοποίησης JSON που χρησιμοποιούνται συνήθως

DataContractAttributeΚαθορίζει αυτόν τον τύπο για τον ορισμό ή την υλοποίηση μιας σύμβασης δεδομένων που μπορεί να σειριοποιηθεί από έναν σειριοποιητή όπως το DataContractSerializer. Για να γίνει ένας τύπος σειριοποιήσιμος, ο συντάκτης του τύπου πρέπει να ορίσει μια σύμβαση δεδομένων για τον τύπο του.

αντιμετώπισαν ένα δύσκολο πρόβλημα,Η γονική κλάση έχει τη δυνατότητα [DataContract] και η θυγατρική κλάση κληρονομεί τη γονική κλάση και όλα τα χαρακτηριστικά της υποκλάσης πρέπει να σειριοποιηθούν και να αποσειριοποιηθούν με το χαρακτηριστικό [DataMember]Δεδομένου ότι η γονική κλάση είναι το ενθυλακωμένο dll κάποιου άλλου, η δυνατότητα [DataContract] της γονικής κλάσης δεν μπορεί να διαγραφεί!

Η δοκιμή έχει ως εξής: Η κλάση Test1 έχει τη δυνατότητα [DataContract], εάν το χαρακτηριστικό δεν προσθέσει τη δυνατότητα [DataMember], θα προκαλέσει την αποτυχία της σειριοποίησης και της αποσειριοποίησης, όπως φαίνεται στο παρακάτω σχήμα:




Σχολιάσαμε τη δυνατότητα [DataContract] της κλάσης Test1 και διαπιστώσαμε ότι μπορεί να σειριοποιηθεί και να αποσειριοποιηθεί κανονικά, ως εξής:



Υπάρχει κάποια προηγμένη χρήση του Newtonsoft.Json που μπορεί να αγνοήσει αυτήν τη δυνατότητα; Η απάντηση είναι ναι!

Απλώς χρησιμοποιήστε την ιδιότητα OptOut του Json.Net. Θα υπερισχύει της DataContract.

//
        Περίληψη:
        Όλα τα δημόσια μέλη είναι σειριακά από προεπιλογή. Τα μέλη μπορούν να εξαιρεθούν χρησιμοποιώντας το Newtonsoft.Json.JsonIgnoreAttribute
        ή System.NonSerializedAttribute. Αυτό είναι το προεπιλεγμένο μοτίβο σειριοποίησης μελών.
        OptOut = 0,
        //
        Περίληψη:
        Μόνο μέλη με την ετικέτα Newtonsoft.Json.JsonPropertyAttribute ή System.Runtime.Serialization.DataMemberAttribute
        είναι σειριακό. Αυτή η λειτουργία σειριοποίησης μέλους μπορεί επίσης να οριστεί με προσθήκη ετικετών
        κλάση με το System.Runtime.Serialization.DataContractAttribute.
        OptIn = 1,
        //
        Περίληψη:
        Όλα τα δημόσια και ιδιωτικά πεδία είναι σειριακά. Τα μέλη μπορούν να εξαιρεθούν χρησιμοποιώντας το Newtonsoft.Json.JsonIgnoreAttribute
        ή System.NonSerializedAttribute. Αυτό το μοτίβο σειριοποίησης μελών είναι επίσης καλό
        Ορίστε το προσθέτοντας ετικέτες στην κλάση με System.SerializableAttribute και ορίζοντας το IgnoreSerializableAttribute
        Ορίστε το Newtonsoft.Json.Serialization.DefaultContractResolver σε false.
        Πεδία = 2


Κωδικός δοκιμής:







Προηγούμενος:Παρακολούθηση AppDomains
Επόμενος:. Το ταχύτερο στοιχείο χαρτογράφησης αντικειμένων OOM του .NET, το Tiny Mapper, στην πράξη του έργου
Δημοσιεύτηκε στις 1/6/2018 1:20:10 μ.μ. |
Προσδιορισμός εάν μια συμβολοσειρά json είναι αντικείμενο ή πίνακας
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

διακόπτης (s.Type.ToString())
                {
                    περίπτωση "Αντικείμενο":
                        διάλειμμα;
                    περίπτωση "Πίνακας":
                        διάλειμμα;
                    Προεπιλογή:
                        διάλειμμα;
                }
Δημοσιεύτηκε στις 21/8/2020 11:52:32 π.μ. |
Η υποστήριξη του ιδιοκτήτη είναι μάστορας στο να ζητάει μηρούς
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com