2010-02-21 4 views
24

Tengo una enumeración simple:¿Cómo se usa XMLSerialize para las propiedades tipadas de Enum en C#?

enum simple 
{ 
    one, 
    two, 
    three 
}; 

también tengo una clase que tiene una propiedad de tipo simple. Intenté decorarlo con el atributo: [XmlAttribute(DataType = "int")]. Sin embargo, falla cuando trato de serializarlo usando un XmlWriter.

¿Cuál es la forma correcta de hacerlo? ¿Tengo que marcar la enumeración en sí y la propiedad y, de ser así, con qué tipo de datos?

+0

¿De qué manera falla? –

Respuesta

20

No debería haber ningún problema serializar propiedades de enumeración:

public enum Simple { one, two, three } 

public class Foo 
{ 
    public Simple Simple { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (var writer = XmlWriter.Create(Console.OpenStandardOutput())) 
     { 
      var foo = new Foo 
      { 
       Simple = Simple.three 
      }; 
      var serializer = new XmlSerializer(foo.GetType()); 
      serializer.Serialize(writer, foo); 
     } 
    } 
} 

produce:

<?xml version="1.0" encoding="utf-8"?> 
<Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Simple>three</Simple> 
</Foo> 
+0

Eso funciona pero hace que la propiedad enum sea un elemento, no un atributo. Cuando trato de convertirlo en un atributo, falla. ¿Alguna sugerencia? – Rhubarb

+2

Intente decorar la propiedad con XmlAttribute: '[XmlAttribute (" simple ")] public Simple Simple {get; conjunto; } ' –

+0

Las propiedades no parecen estar decoradas. Solo campos, ¿correcto? – Rhubarb

39

De acuerdo con la respuesta de Darin Dimitrov - única cosa extra que me señalar es que si se quiere control sobre cómo se serializan sus campos enumerados, entonces puede decorar cada campo con el atributo XmlEnum.

public enum Simple 
{ 
     [XmlEnum(Name="First")] 
     one, 
     [XmlEnum(Name="Second")] 
     two, 
     [XmlEnum(Name="Third")] 
     three, 
} 
+2

Por favor, no olvide marcar enum con el atributo [Serializable]. – Anton

Cuestiones relacionadas