Eigenschaft von Serialisierung über benutzerdefiniertes Attribut ausschließen (json.net)
Ich in der Lage sein müssen zu kontrollieren, wie/ob bestimmte Eigenschaften in einer Klasse serialisiert werden. Der einfachste Fall ist [ScriptIgnore]
. Jedoch, ich will nur diese Attribute geehrt werden, für dieses eine bestimmte Serialisierung situation, in der ich arbeite - wenn andere Module downstream in der Anwendung serialisieren möchten diese Objekte, keines dieser Attribute sollten in die Quere kommen.
Also mein Gedanke ist, verwenden Sie ein benutzerdefiniertes Attribut MyAttribute
auf die Eigenschaften, und initialisieren Sie die spezifische Instanz von JsonSerializer mit einem Haken, der weiß, dass zu sehen, dass für das Attribut.
Auf den ersten Blick sehe ich keine der verfügbaren Haken Punkte in JSON.NET wird die PropertyInfo
für die current-Eigenschaft zu tun, einer Prüfung - nur der Wert der Eigenschaft. Bin ich etwas fehlt? Oder einen besseren Weg, um diesen Ansatz?
InformationsquelleAutor der Frage Rex M | 2012-11-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie ein paar Optionen. Ich empfehle Ihnen, Lesen Sie die Json.Net Dokumentation Artikel zum Thema vor, unten zu Lesen.
Der Artikel stellt zwei Methoden:
bool
Wert basiert auf einer Namenskonvention, Json.Net Folgen werden, um zu bestimmen, ob oder nicht zu serialisieren der Eigenschaft.Den beiden, ich bevorzuge die letztere. Überspringen Attribute zusammen -- nur verwenden, Sie zu ignorieren-Eigenschaften über alle Formen der Serialisierung. Erstellen Sie stattdessen eine benutzerdefinierte Vertrag resolver ignoriert, dass die Eigenschaft in Frage, und verwenden Sie nur den Vertrag resolver-wenn Sie möchten, ignorieren Sie die Eigenschaft, so dass andere Benutzer der Klasse frei zu serialisieren der Eigenschaft oder nicht an Ihrer eigenen Lust und Laune.
Bearbeiten Zu vermeiden, link rot, ich bin Entsendung der in Frage stehenden code aus dem Artikel
InformationsquelleAutor der Antwort Randolpho
Hier ist eine generische wiederverwendbare "ignore" resolver basierend auf die akzeptierte Antwort:
Und Verwendung:
InformationsquelleAutor der Antwort drzaus
Verwenden Sie die
JsonIgnore
Attribut.Beispielsweise ausschließen
Id
:InformationsquelleAutor der Antwort ramonesteban78
Hier ist eine Methode, basierend auf drzaus' ausgezeichnete serializer Vertrages verwendet lambda-Ausdrücke. Einfach fügen Sie Sie der gleichen Klasse. Nachdem alle, die nicht lieber dem compiler zu tun, der die Prüfung für Sie?
Können Sie jetzt ignorieren, die Eigenschaften leicht und fließend:
InformationsquelleAutor der Antwort Steve Rukuts
I don ' T care zu setzen, die Namen der Eigenschaft als String, falls Sie es jemals ändern würde brechen meine anderen code.
Hatte ich verschiedene "view modes" auf die Objekte, die ich brauchte, um serialisiert, so landete ich tun so etwas wie dieses, die im Vertrag resolver (Ansicht-Modus zur Verfügung gestellt von Konstruktor-argument):
Wo meine Objekte so Aussehen:
Der Nachteil wäre, das bit der Reflexion, der resolver, aber ich denke es lohnt sich es zu haben, mehr wartbar code.
InformationsquelleAutor der Antwort frattaro
Hatte ich gute Ergebnisse mit der Kombination der beiden drzaus und Steve Rukuts Antworten. Allerdings habe ich vor einem problem, wenn ich JsonPropertyAttribute mit einem anderen Namen oder caps für die Eigenschaft. Zum Beispiel:
Gehören UnderlyingName Berücksichtigung löst das problem:
InformationsquelleAutor der Antwort Baron Ch'ng