2017-11-27 2 views
0

Ich weiß, dass das Thema wiederholt wird. Das ist nicht das erste Mal, dass ich an XmlSerializer arbeite, und ich hatte dieses Problem nicht. aber für diese Zeit habe ich keine Ahnung, was vor sich geht.Angegebenes Muster wird aufgerufen, hat aber keine Wirkung - funktioniert nicht (XmlSerializer)

public string comp_addr01 
{ 
    get 
    { 
     return this.comp_addr01Field; 
    } 
    set 
    { 
     this.comp_addr01Field = value; 
    } 
} 

[XmlIgnore] 
public bool comp_addr01Specified { get { return true; } } 

I getestet comp_add01Specified aufgerufen wird, wenn auch nicht in XML-Ausgabe gezeigt.

der einzige Weg, bisher gearbeitet wird, wenn XmlElement(IsNullable = true)

[XmlElement(IsNullable = true)] 
public string comp_addr01 
{ 
    get 
    { 
     return this.comp_addr01Field; 
    } 
    set 
    { 
     this.comp_addr01Field = value; 
    } 
} 

aber jetzt <comp_addr01 xsi:nil="true" />xsi hinzugefügt: nil = „true“ noch gezeigt ich es gezeigt werden nicht benötigt wird. Ich weiß nicht, was all diese Unordnung passiert

+0

Es ist nicht wirklich klar, was Ihr Problem ist. comp_add01Specified sollte nicht in XML enthalten sein, da Sie XmlIgnore darauf haben. Ist comp_addr01 nicht in xml enthalten? Es wird nicht ohne das IsNullable enthalten sein, wenn es null ist, so funktionieren die Dinge. Es wird eingeschlossen, wenn es nicht null ist. –

+0

@TimRutter, danke für deine Antwort. Der Punkt ist, dass ich will, dass comp_addr01 immer in der Xml-Datei erscheint, unabhängig davon, ob der Wert null ist oder nicht. Daher habe ich comp_addr01Sepcified verwendet, damit XmlSerializer weiß, dass diese Eigenschaft enthalten sein muss. Obwohl comp_addr01Specified aufgerufen wurde, wird comp_addr01 nur angezeigt, wenn es nicht null ist. Nachdem ich das Attribut 'XmlElement (IsNullable = true) 'hinzugefügt hatte, erschien comp_addr01. Wenn nicht falsch, habe ich das gleiche Konzept vor und arbeitete ohne XmlElement-Attribut. Deshalb habe ich die Frage gestellt. Vielleicht habe ich etwas verpasst. –

Antwort

0

Wenn IsNullable ist falsch (oder weggelassen) dann wird ein Null-Wert für comp_addr01 kein Element zum Xml für diese Eigenschaft hinzugefügt werden. Sie können nicht erwarten, dass der Serializer in diesem Fall ein leeres Tag ausgibt, da Sie nicht wissen können, wann das Deserialisieren später ausgeführt wird, ob dieses leere Tag zu einem Nullwert führen sollte - es könnte nur eine Instanz Ihres Objekts mit Nein sein Untereigenschaften definiert.

Wenn IsNullable wahr ist, dann weisen Sie den Serializer an, ein Element mit xsi: nil = "true" zu erstellen, wenn die Eigenschaft null ist - das Bit xsi: nil teilt dem Deserializer mit, dass dieses Element tatsächlich null ist.

XmlElementAttribute.IsNullable

„Ruft einen Wert ab, der XmlSerializer angibt, ob ein Mitglied serialisieren muss, die auf null als leeres-Tag mit dem xsi gesetzt ist. Nil Attribut auf true gesetzt“

Verwandte Themen