2010-02-21 9 views
24

Mam proste ENUM:Jak korzystać z właściwości XMLSerialize dla Enum typed w C#?

enum simple 
{ 
    one, 
    two, 
    three 
}; 

Mam także klasę, która ma właściwość typu simple. Próbowałem go przyozdobić atrybutem: [XmlAttribute(DataType = "int")]. Jednak nie powiedzie się, gdy próbuję serializować go za pomocą XmlWriter.

Jaki jest właściwy sposób na zrobienie tego? Czy muszę oznaczać samą enum, jak i własność, a jeśli tak, z jakiego rodzaju danych?

+0

W jaki sposób zawodzi? –

Odpowiedz

20

Nie powinno być żadnych problemów szeregowania Właściwości 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); 
     } 
    } 
} 

produkuje:

<?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

To działa, ale sprawia, że ​​właściwość enum jest elementem, a nie atrybutem. Kiedy próbuję zrobić to atrybutem, to się nie uda. Jakieś sugestie? – Rhubarb

+2

Spróbuj udekorować obiekt za pomocą XmlAttribute: '[XmlAttribute (" simple ")] public Simple Simple {get; zestaw; } ' –

+0

Właściwości nie wydają się być udekorowane. Tylko pola, prawda? – Rhubarb

39

Jak na odpowiedź Darin Dimitrov - tylko za dodatkową rzeczą, którą mogę podkreślić, że jeśli chcesz kontrolując sposób wyodrębniania pól wyliczeniowych, możesz udekorować każde pole atrybutem XmlEnum.

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

Proszę nie zapominać o znaku enum z atrybutem [Serializable]. – Anton