2010-02-21 65 views
24

我有一个简单枚举:如何使用C#中的Enum类型化属性的XMLSerialize?

enum simple 
{ 
    one, 
    two, 
    three 
}; 

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

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

+0

它以哪种方式失败? – 2010-02-21 21:39:00

回答

20

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

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> 
+0

这有效,但它使enum属性不是一个属性。当我试图使它成为一个属性失败。有什么建议么? – Rhubarb 2010-02-21 20:15:22

+2

尝试用XmlAttribute装饰属性:'[XmlAttribute(“simple”)] public Simple Simple {get;组; }' – 2010-02-21 21:58:34

+0

属性似乎不能被装饰。只有字段,对吗? – Rhubarb 2010-02-24 23:51:48

39

按照达林季米特洛夫的答案 - 唯一的额外我想指出的是,如果你想控制你的枚举字段是如何被序列化的,然后你可以使用XmlEnum属性修饰每个字段。

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

请不要忘记用[Serializable]属性标记枚举。 – Anton 2016-08-15 10:52:51

相关问题