2011-11-01 3 views
7

Dato il seguente codice ....NET Serializzatore XML attributi opzionali

[XmlType("Field")] 
public class SearchField 
{ 
    [XmlAttribute("alias")] 
    public string Alias; 

    [XmlAttribute("entity")] 
    public string Entity; 
} 

Alias ​​è un campo facoltativo per noi, ma il deserializzatore getta quando l'attributo "alias" manca dalla xml. Come lo rendi opzionale? È richiesto uno schema?

risposta

9

Strano, perché il seguente programma funziona bene per me, senza lanci:

using System; 
using System.IO; 
using System.Xml; 
using System.Xml.Serialization; 

[XmlType("Field")] 
public class SearchField 
{ 
    [XmlAttribute("alias")] 
    public string Alias; 

    [XmlAttribute("entity")] 
    public string Entity; 
} 

class Program 
{ 
    static void Main() 
    { 
     using (var reader = new StringReader("<Field entity=\"en\" />")) 
     { 
      var serializer = new XmlSerializer(typeof(SearchField)); 
      var s = (SearchField)serializer.Deserialize(reader); 
      Console.WriteLine(s.Alias); 
      Console.WriteLine(s.Entity); 
     } 
    } 
} 

Come si può vedere l'attributo alias viene omesso dal codice XML di input e tuttavia nessun problema deserializzazione.