2010-02-21 3 views
24

Tôi có một enum đơn giản:Làm thế nào để bạn sử dụng XMLSerialize cho các thuộc tính được nhập bằng Enum trong C#?

enum simple 
{ 
    one, 
    two, 
    three 
}; 

Tôi cũng có một lớp học có một loại tài sản của simple. Tôi đã thử trang trí nó với thuộc tính: [XmlAttribute(DataType = "int")]. Tuy nhiên, nó không thành công khi tôi cố gắng tuần tự hóa nó bằng cách sử dụng XmlWriter.

Cách thích hợp để thực hiện việc này là gì? Tôi có phải đánh dấu enum chính nó cũng như tài sản, và nếu như vậy, với loại dữ liệu?

+0

Bằng cách nào nó không thành công? –

Trả lời

20

Không nên có bất kỳ vấn đề serializing tính 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); 
     } 
    } 
} 

sản xuất:

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

Điều đó làm việc nhưng nó làm cho thuộc tính enum thành phần không phải là một thuộc tính. Khi tôi cố gắng làm cho nó trở thành một thuộc tính nó thất bại. Bất kỳ đề xuất? – Rhubarb

+2

Thử trang trí thuộc tính với XmlAttribute: '[XmlAttribute (" simple ")] công khai Simple Simple {get; bộ; } ' –

+0

Các thuộc tính dường như không thể được trang trí. Chỉ các trường, đúng không? – Rhubarb

39

Như mỗi câu trả lời Darin Dimitrov của - chỉ điều thêm tôi muốn chỉ ra là nếu bạn muốn kiểm soát cách các trường enum của bạn được tuần tự hóa sau đó bạn có thể trang trí mỗi trường với thuộc tính XmlEnum.

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

Xin vui lòng, đừng quên đánh dấu enum với thuộc tính [Serializable]. – Anton