2010-02-24 5 views

Antwort

6

Die Lösung für dieses Problem bestand darin, eine PropertyNameSpecified-Eigenschaft zu erstellen, die der Serializer verwendet, um zu bestimmen, ob die Eigenschaft serialisiert werden soll oder nicht. Zum Beispiel:

public string Data { get; set; } 

[XmlIgnore] 
public bool DataSpecified 
{ 
    get { return !String.IsNullOrEmpty(Data); } 
    set { return; } //The serializer requires a setter 
} 
0

Sie könnten versuchen, das XMLElementAttribute wie [XmlElement(IsNullable=true)] zu diesem Mitglied hinzuzufügen. Dadurch wird der XML-Serializer gezwungen, das Element hinzuzufügen, selbst wenn es null ist.

+9

Aber wird das nicht machen

12

Ich habe kürzlich dies getan und es gibt eine alternative Möglichkeit, es zu tun, das scheint ein bisschen einfacher. Sie müssen nur den Wert der Eigenschaft zu einer leeren Zeichenfolge initialisieren, dann wird ein leeres Tag erstellt, wie Sie es benötigen;

Data = string.Empty; 
+0

Für Saiten wirkte das wie ein Zauber! Wenn Data niemals einen Wert zugewiesen bekommt, wird es im XML als '' und ohne das Attribut xsi: nil = "true" angezeigt. –

1

try public bool verwenden ShouldSerialize_PropertyName _() {} mit innerhalb der Standardwert festlegen.

public bool ShouldSerializeData() 
{ 
    Data = Data ?? ""; 
    return true; 
} 

Beschreibung, warum dies funktioniert, kann auf MSDN finden.

+1

Ich stehe korrigiert. Es wurde ein Link zur relevanten Dokumentation hinzugefügt, damit andere nicht denselben Fehler machen. – BradleyDotNET

0

Sie könnten versuchen, die XmlElementAttribute wie das Hinzufügen von [XmlElement (IsNullable = true)] zu dem Mitglied und auch in der get/set-Eigenschaft etwas wie folgt festgelegt:

[XmlElement(IsNullable = true)] 
public string Data 
{ 
    get { return string.IsNullOrEmpty(this.data) ? string.Empty : this.data; } 
    set 
    { 
     if (this.data != value) 
     { 
      this.data = value; 
     } 
    } 
} 
private string data; 

Und so werden Sie nicht haben:

<Data xsi:nil="true" /> 

werden Sie haben dies auf render:

<Data /> 
Verwandte Themen