Verhindern, dass <xsi:nil="true"> auf Nullable Value Types beim Serialisieren in XML
Habe ich Hinzugefügt einige nullable value types zu meinem serialisierbare Klasse. Ich führe eine Serialisierung mit XmlSerializer
aber wenn der Wert festgelegt ist null
, bekomme ich einen leeren Knoten mit xsi:nil="true"
. Dies ist das richtige Verhalten, wie ich gefunden habe, bei Xsi:nil-Attribut-Bindung Unterstützen.
Gibt es eine Möglichkeit, diese option abgeschaltet, so dass nichts ausgegeben wird, wenn der Werttyp ist null
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe das gleiche problem.. hier ist einer der Orte, die ich gelesen über den Umgang mit nullable-Wertetypen beim serialisieren in XML: http://stackoverflow.com/questions/244953/serialize-a-nullable-int
erwähnen Sie über die Verwendung von built-in patterns wie das erstellen zusätzliche Eigenschaften für nullable value types. wie für eine Eigenschaft mit dem Namen
müssen Sie entweder hinzufügen
entweder
public bool ShouldSerializeABC() {return ABC.HasValue;}
oder öffentlichen
bool ABCSpecified { get { return ABC.HasValue; } }
war ich nur mit der Serialisierung zu xml zu senden, um eine gespeicherte sql-proc, so auch mich hat es vermieden, die änderung meiner Klassen. Ich bin ein
[not(@xsi:nil)]
Kontrolle über alle die nullable-Elemente in meine .value () - Abfrage.xsi:nil="true"
Knoten.Fand ich, dass die
public bool ABCSpecified
war die einzige, die arbeitete .NET 4.0. Ich hatte auch hinzufügen das XmlIgnoreAttribute
Hier war meine komplette Lösung zu unterdrücken, um eine Zeichenfolge mit dem Namen ABC in der Web-Referenz-Ressource.cs-Datei:
Ich mußte eine
ShouldSerialize
Methode auf jeden nullable-Wert.Alle meta-Methoden wie Angegeben oder ShouldSerialize ist einfach nur schlechte Programmierung design von microsoft .Net-XML-Struktur. Es wird sogar noch komplizierter, wenn Sie haben keinen direkten Zugriff auf die Klassen, die Sie serialisieren möchten.
In Ihrer Serialisierung Methode sollten Sie nur hinzufügen, ein Attribut wie "ignoreNullable".
Mein Aktueller workaround serialisiert xml-und nur dann entfernt alle Knoten mit nil="true" Verwendung der folgenden Funktion.
Dies ist wahrscheinlich die am wenigsten anspruchsvolle Antwort, aber ich löste es, für mich, mit einem einfachen string replace.
.Ersetzen(" xsi:nil=\"true\" ", "");
Ich bin Serialisierung von string-zunächst jedenfalls. Ich kann Sie speichern, um die Datei später.
Er hält alle meine XmlWriterSettings intakt. Eine andere Lösung fand ich Ihr es versaut:)
Habe ich erreicht es auf diese Weise: