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

Rhu*_*arb 27 .net c# xml serialization xml-serialization

我有一个简单的枚举:

enum simple 
{ 
  one, 
  two, 
  three 
};
Run Code Online (Sandbox Code Playgroud)

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

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

zeb*_*box 46

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

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

  • 请不要忘记使用[Serializable]属性标记枚举. (3认同)

Dar*_*rov 24

串行化枚举属性应该没有任何问题:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

生产:

<?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>
Run Code Online (Sandbox Code Playgroud)

  • 尝试使用XmlAttribute来装饰属性:`[XmlAttribute("simple")] public Simple Simple {get; 组; }` (2认同)