Как вы используете XMLSerialize для типизированных свойств Enum в C #? - PullRequest
26 голосов
/ 21 февраля 2010

У меня есть простое перечисление:

enum simple 
{ 
  one, 
  two, 
  three 
};

У меня также есть класс со свойством типа simple. Я попытался украсить его атрибутом: [XmlAttribute(DataType = "int")]. Однако, это терпит неудачу, когда я пытаюсь сериализовать это, используя XmlWriter.

Как правильно это сделать? Нужно ли отмечать само перечисление, а также свойство и, если да, каким типом данных?

Ответы [ 2 ]

45 голосов
/ 21 февраля 2010

Что касается ответа Дарина Димитрова, я бы хотел отметить лишь одну дополнительную вещь: если вы хотите контролировать сериализацию полей перечисления, вы можете украсить каждое поле атрибутом XmlEnum .

public enum Simple
{
      [XmlEnum(Name="First")]
      one,
      [XmlEnum(Name="Second")]
      two,
      [XmlEnum(Name="Third")]
      three,
}
23 голосов
/ 21 февраля 2010

Не должно быть проблем с сериализацией свойств перечисления:

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

производит:

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