2011-11-01 15 views
7

Biorąc pod uwagę następujący kod ....NET XML serializer atrybuty opcjonalne

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

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

Alias ​​pole jest opcjonalne dla nas, ale Deserializator rzuca gdy atrybut „alias” brakuje XML. Jak sprawić, by było opcjonalne? Czy wymagany jest schemat?

Odpowiedz

9

dziwne, ponieważ następujący program działa dobrze dla mnie, bez żadnych throwings:

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

Jak widać atrybut alias pominięto z XML wejściowego i jeszcze nie problem deserializacji.

Powiązane problemy