如何在c#中使用XMLSerialize for Enum类型的属性?

时间:2010-02-21 15:14:25

标签: c# .net xml serialization xml-serialization

我有一个简单的枚举:

enum simple 
{ 
  one, 
  two, 
  three 
};

我还有一个具有simple类型属性的类。我尝试使用属性[XmlAttribute(DataType = "int")]进行装饰。但是,当我尝试使用XmlWriter序列化它时失败。

这样做的正确方法是什么?我是否必须标记枚举本身以及属性,如果是,请使用哪种数据类型?

2 个答案:

答案 0 :(得分:44)

根据Darin Dimitrov的回答 - 我要指出的另一件事是,如果你想控制枚举字段的序列化方式,那么你可以使用XmlEnum属性来装饰每个字段。

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

答案 1 :(得分:22)

序列化枚举属性应该没有任何问题:

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>