Ausschließen null Eigenschaften, wenn Sie mit XmlSerializer
Ich bin serialisieren einer Klasse wie dieser
public MyClass
{
public int? a { get; set; }
public int? b { get; set; }
public int? c { get; set; }
}
All die Typen, die null-Werte zulassen, denn ich will minimal gespeicherten Daten bei der Serialisierung eines Objekts von diesem Typ. Allerdings, wenn es serialisiert wird mit nur "einem" aufgefüllt, bekomme ich die folgende xml -
<MyClass ...>
<a>3</a>
<b xsi:nil="true" />
<c xsi:nil="true" />
</MyClass>
Wie kann ich diese einrichten, um nur get xml für die nicht-null-Eigenschaften? Die gewünschte Ausgabe wäre
<MyClass ...>
<a>3</a>
</MyClass>
Ausschließen will ich diese null-Werte, da gibt es mehrere Eigenschaften, und dies ist immer in einer Datenbank gespeichert (ja, das ist nicht mein nennen) so dass ich will, dass die ungenutzten Daten minimal.
InformationsquelleAutor der Frage Allen Rice | 2009-10-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme an, man könnte einen XmlWriter, der filtert alle Elemente heraus, mit einem xsi:nil-Attribut, und leitet alle Aufrufe an den zugrunde liegenden wahren Schriftsteller.
InformationsquelleAutor der Antwort Martin v. Löwis
Ignorieren Sie bestimmte Elemente mit Spezifikation
{Feld}Angegebenen Eigenschaften wird Ihnen sagen, die serializer wenn es serialisieren soll die entsprechenden Felder ein oder nicht durch Rückgabe von true/false.
InformationsquelleAutor der Antwort Allen Rice
Besser spät als nie...
Habe ich einen Weg gefunden (vielleicht auch nur mit dem neuesten framework, weiß ich nicht), dies zu tun.
Ich war mit DataMember-Attribut für einen WCF-webservice-Vertrag-und ich war mein Objekt wie folgt:
InformationsquelleAutor der Antwort Aurel
Haben Sie gelesen ALSO: Serialisieren eines nullable int ?
InformationsquelleAutor der Antwort Rubens Farias
Noch eine Andere Lösung: regex-zu den Rettungs -, Einsatz
\s+<\w+ xsi:nil="true" \/>
entfernen Sie alle null-Eigenschaften aus einem string mit XML.Ich bin damit einverstanden, nicht die eleganteste Lösung und funktioniert nur, wenn Sie nur zu serialisieren. Aber das war alles, was ich heute brauchen, und ich nicht hinzufügen wollte
{Foo}Specified
Eigenschaften für alle Eigenschaften, die null-Werte zulassen.InformationsquelleAutor der Antwort ArieKanarie
1) Erweiterung
1a) Utf8StringWriter
2) Erstellen Sie XElement
3) Entfernen Nil
4) Datei Speichern
InformationsquelleAutor der Antwort Krzysztof Radzimski
Diese Frage wurde gebeten, eine ziemlich lange Zeit her, aber immer noch SEHR relevant, auch im Jahr 2017. Keine der vorgeschlagenen Antworten hier waren nicht zufriedenstellend für mich, so ist hier eine einfache Lösung, die ich kam mit:
Mithilfe von regulären Ausdrücken ist der Schlüssel. Da haben wir nicht viel Kontrolle über die XmlSerializer-Verhalten, also lasst uns NICHT versuchen zu verhindern, dass es zu serialisieren diejenigen, nullable value types. Stattdessen nehmen Sie nur die serialisierte Ausgabe und ersetzen die unerwünschten Elemente, die mit einem leeren string mit Regex. Das Muster verwendet (in C#):
Hier ein Beispiel:
Ich hoffe, das hilft.
InformationsquelleAutor der Antwort Bigabdoul
Der einfachste Weg, schreiben Sie code wie diesen, wo die genaue Leistung ist wichtig, ist:
xsd.exe
.xsd.exe
wieder), und überprüfen Sie es gegen Ihre ursprüngliche schema, um sicherzustellen, dass die Serialisierung korrekt reproduziert jedes Verhalten, die Sie wollen.Zwicken und wiederholen, bis Sie funktionierenden code.
Wenn Sie nicht sicher sind, die exakte Datentypen verwenden anfangs, beginnen Sie mit Schritt 3 anstelle von Schritt 1, dann zwicken.
IIRC, für Ihr Beispiel, Sie werden fast sicher am Ende mit
Specified
Eigenschaften, wie Sie bereits beschrieben habe, aber Sie für Sie generiert, gewinnt das schreiben per hand. 🙂InformationsquelleAutor der Antwort Christian Hayter
Markieren Sie das element mit
[XmlElement("elementName", IsNullable = false)]
null-Werte weggelassen werden.
InformationsquelleAutor der Antwort user1920925