1

クラスをXMLにシリアル化する必要があります。 それは動作しますが、文字列属性 "origen"は常に空文字列としてシリアル化されています。それはクラスXmlSerializationが空の場合は文字列属性を無視する

nullのとき、私はシリアライザは避けたい は、XML内でそれを含める例えば、FirmaElementです:

FirmaElement firma= new FirmaElement(); 
firma.Value="HITHERE"; 
firma.origen=String.Empty; 

期待される結果

string x= Serialize(FirmaElement); 
x="<Firma>HITHERE</Firma>"; 

FirmaElement firma= new FIrmaElement(); 
firma.Value="HITHERE"; 
firma.origen="OK"; 

予想される結果

string x= Serialize(FirmaElement); 
x="<Firma origen='ok'>HITHERE</Firma>"; 

コード

[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://gen/ces/headers/CesHeader")] 
[System.Xml.Serialization.XmlRoot("Firma")] 
public class FirmaElement 
{ 
    public FirmaElement() { } 
    string _origen = String.Empty; 
    string _value = String.Empty; 


    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string origen 
    { 
     get { return _origen; } 
     set { _origen = value; } 
    } 

    [System.Xml.Serialization.XmlTextAttribute()] 
    public string Value 
    { 
     get { return _value; } 
     set { _value = value; } 
    } 


    public override string ToString() 
    { 
     return this.Value; 
    } 


    //IS THIS CORRECT? SHould i override something?? 
    public string Serialize() 
    { 
     XmlAttributeOverrides xOver = new XmlAttributeOverrides(); 
     XmlAttributes attrs = new XmlAttributes(); 

     /* Setting XmlIgnore to false overrides the XmlIgnoreAttribute 
      applied to the Comment field. Thus it will be serialized.*/ 
     attrs.XmlIgnore = String.IsNullOrEmpty(origen); 
     xOver.Add(typeof(string), "origen", attrs); 

     I DONT KNOW WHAT TO PUT HERE, IT'S CORRECT?? 

     //XmlSerializer xSer = new XmlSerializer(typeof(XmlTypeAttribute), xOver); 
    } 



} 
+0

アトリビュートが値なしで表示されることにどんな害がありますか? XMLは、値の有無にかかわらずデータ形式を処理するように設計されています。 –

+0

[Xmlシリアル化 - ヌル値を隠す]の可能な複製(http://stackoverflow.com/questions/5818513/xml-serialization-hide-null-values) –

答えて

0

あなたは、特定のプロパティは、名前ShouldSerialize{PropertyName}と方法の助けを借りて、シリアル化するかどうかを指定することができます。 this answerを確認してください。

0

origenSpecifiedという名前のプロパティをFirmaElementクラスに追加する必要があります。

[XmlIgnore] 
    public bool origenSpecified 
    { 
     get 
     { 
      return !(string.IsNullOrEmpty(origen)); 
     } 
    } 
関連する問題