XML-Serialisierung und DefaultValue("") damit das problem in c#
meiner Klasse Eigenschaft hat default-Wert werden serialisieren.
public class DeclaredValue
{
[XmlElement(ElementName = "Amount", DataType = "double", IsNullable = false), DefaultValue(999)]
public double Amount { get; set; }
[XmlElement(ElementName = "Reference2", DataType = "string", IsNullable = false), DefaultValue("")]
public string Reference2 { get; set; }
}
also wir erstellen Sie eine Instanz der DeclaredValue Klasse und bieten Wert für Reference2 Eigentum und ordnen Sie alles, was für die Menge. wenn wir also die Serialisierung der Klasse DeclaredValue dann kein tag fand für die Menge der in meiner xml. ich erwähne default-Wert für " Betrag "999", dann warum es nicht funktioniert, in der Serialisierung. ich will, dass, wenn nicht möglich etwas für Betrag dann amoun tag sollte es in meiner xml mit default-Wert.
dazu, was wie ich muss dekorieren Sie die Eigenschaft "Betrag", dass es kommt immer mit default-Wert in der xml nach der Serialisierung, wenn der Benutzer nicht zuordnen nichts zu dieser Eigenschaft.
bitte guide mich, was ich ändern muss in den code, um meine gewünschte Ausgabe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Pro die beachten Sie auf der MSDN-Website:
Etwas überraschend die DefaultValue-regelt nur die schreiben, die ein Objekt, die Mitglieder, die gleich Ihre DefaultValue wird nicht geschrieben.
Müssen Sie noch initialisieren Mitglieder vor oder nach dem laden von sich aus, z.B. im Konstruktor.
Lassen Sie mich gründlich beschreiben, was passiert ist.
Wenn XmlSerializer Deserialisieren () - Methode aufgerufen wird, erstellt ein neues Objekt mit einem Standard-Konstruktor. Es gilt nicht, jedem DefaultValueAttributes zu diesem Objekt, I beleave, weil der Annahme, dass der default-ctor sollte "besser wissen", wie Sie initialisiert Defaultwerte. Aus dieser Sicht ist es logisch.
XmlSerializer nicht serialisieren Mitglieder, die Werte sind die gleichen wie gekennzeichnet durch die DefaultValue-Attribut. Von einem Punkt der Ansicht, ein solches Verhalten ist getrieben von der Logik zu.
Aber wenn Sie nicht initialisieren Mitglieder im ctor und rufen Deserialisieren Methode, siehe XmlSerializer keine entsprechende xml-Feld, aber Sie sehen, dass das Feld/die Eigenschaft hat, DefaultValueAttribute, serializer lassen Sie einfach so mit dem Wert (entsprechend der Annahme, dass der default-Konstruktor weiß besser, wie zum initialisieren einer Klasse "standardmäßig"). Und du hast deine Nullstellen.
Lösung
Zum initialisieren einer Klasse Mitglieder, die von diesen DefaultValueAttributes (manchmal ist es sehr praktisch, um diese Initialisierung nur im Ort) können Sie solche einfachen Methode:
Diese "public void LoadDefaults()", dekoriert werden kann als eine Verlängerung zu widersprechen oder zu verwenden, wie einige statische Methode einer Hilfsklasse.
Als Henk Holterman wissen, ist dieses attribut nicht gesetzt, der default-Wert automatisch. Ihr Zweck ist hauptsächlich für die Verwendung durch visual Designer zum zurücksetzen einer Eigenschaft auf Ihren Standardwert zurück.
Wie andere erwähnt, die
DefaultValue
Attribut nicht initialisieren Sie die Eigenschaft. Könnte man eine einfache Schleife, um alle Eigenschaften:Obwohl
?.Value
zurückkehren konntenull
es arbeitet mit non-nullable Typen, getestet habe ich diese.Wenn nur wenige Ihrer Eigenschaften einen Standardwert haben, sollten Sie vielleicht nur den Wert einzustellen, wenn es da ist.
Wenn alle Eigenschaften sollte ein Standard-Wert, entfernen Sie die
?
zu erhalten eine Fehlermeldung, wenn Sie vergessen haben ein.Wahrscheinlich, arrays wird nicht funktionieren, finden Sie MajesticRa Lösung, wie damit umzugehen ist.