|
|
Δημοσιεύτηκε στις 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, στην πράξη του έργου
|