2010-02-21 5 views
24

Ho una semplice enum:Come si utilizza XMLSerialize per le proprietà Enum digitate in C#?

enum simple 
{ 
    one, 
    two, 
    three 
}; 

Ho anche una classe che ha una proprietà di tipo simple. Ho provato a decorarlo con l'attributo: [XmlAttribute(DataType = "int")]. Tuttavia, fallisce quando provo a serializzarlo usando un XmlWriter.

Qual è il modo corretto per farlo? Devo contrassegnare l'enum stesso così come la proprietà e, in caso affermativo, con quale tipo di dati?

+0

In che modo fallisce? –

risposta

20

Non ci dovrebbe essere alcun problema serializzazione proprietà enum:

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

Funziona ma rende la proprietà enum un elemento non un attributo. Quando provo a renderlo un attributo fallisce. Eventuali suggerimenti? – Rhubarb

+2

Prova a decorare la proprietà con XmlAttribute: '[XmlAttribute (" simple ")] public Simple Simple {get; impostato; } ' –

+0

Le proprietà non sembrano in grado di essere decorate. Solo i campi, corretto? – Rhubarb

39

Come per la risposta di Darin Dimitrov - unica cosa in più mi piacerebbe sottolineare è che se si vuole controllo su come i campi enumerati sono serializzati, quindi puoi decorare ogni campo con l'attributo XmlEnum.

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

Per favore, non dimenticare mark enum con l'attributo [Serializable]. – Anton

Problemi correlati