2011-01-29 32 views
8

Một câu hỏi khác về tuần tự hóa XML với .Net.Mảng Deserialise XML tại gốc tài liệu

Tôi nhận được chuỗi XML từ bên thứ 3 và muốn phân tích cú pháp thành lớp .Net với mức tối thiểu là phiền phức. Tôi không muốn sử dụng xsd như XML của tôi là khá đơn giản và tôi không thích các lớp tiết nó phun ra. Tôi đã có những điều cơ bản của deserialisation làm việc nhưng đang đấu tranh với một mảng cấp độ gốc.

Vấn đề XML như sau:

<people> 
    <person> 
    <id>1234</id> 
    </person> 
    <person> 
    <id>4567</id> 
    </person> 
</people> 

Làm thế nào để lập bản đồ thuộc tính trên C# lớp dân của tôi để deserialise nó?

Đây là những gì tôi muốn làm việc nhưng không.

[Serializable()] 
[XmlRootAttribute("people", Namespace = "", IsNullable = false)] 
public class People 
{ 
    [XmlArrayItem(typeof(Person), ElementName = "person")] 
    public List<Person> Persons; 
} 

Nếu tôi mangle XML để:

<result> 
    <people> 
    <person> 
     <id>1234</id> 
    </person> 
    <person> 
     <id>4567</id> 
    </person> 
    </people> 
</result> 

Sau đó, nó làm việc với các định nghĩa lớp dưới đây nhưng nó cảm thấy rất sai.

[Serializable()] 
[XmlRootAttribute("result", Namespace = "", IsNullable = false)] 
public class People 
{ 
    [XmlArray(ElementName = "people")] 
    [XmlArrayItem(typeof(Person), ElementName = "person")] 
    public List<Person> Persons; 
} 
+0

bạn không cần '[Serializable]', btw - nó không được sử dụng bởi 'XmlSerializer' –

Trả lời

9
[XmlElement("person")] 
public List<Person> Persons; 

mặc dù thực sự tôi thích:

private List<Person> persons; 
[XmlElement("person")] 
public List<Person> Persons {get{return persons??(persons=new List<Person>());}} 

vì điều này có:

  • hoãn tạo danh sách, khi bạn không cần bất kỳ người
  • không " đặt "trên thuộc tính danh sách (không cần thiết)
Các vấn đề liên quan