2011-11-01 16 views
7

Dado el siguiente código ....NET serializador XML atributos opcionales

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

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

alias es un campo opcional para nosotros, pero el deserializer lanza cuando el atributo "alias" no aparece en el XML. ¿Cómo lo haces opcional? ¿Se requiere un esquema?

Respuesta

9

extraño, ya que el programa siguiente funciona bien para mí, sin ningún tipo de lanzamientos:

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); 
     } 
    } 
} 

Como se puede ver el atributo alias se omite del XML de entrada y sin embargo ningún problema deserializar.

Cuestiones relacionadas