2009-06-18 29 views
37

Tôi gặp vấn đề với việc tuần tự hóa và đối tượng, tôi có thể tạo ra tất cả các kết quả đầu ra chính xác ngoại trừ nơi tôi có một Phần tử cần giá trị và thuộc tính. Đây là kết quả yêu cầu:Làm thế nào để thêm thuộc tính cho C# XML Serialization

<Root> 
    <Method>Retrieve</Method> 
    <Options> 
    <Filter> 
     <Times> 
     <TimeFrom>2009-06-17</TimeFrom> 
     </Times> 
     <Document type="word">document name</Document> 
    </Filter> 
    </Options> 
</AdCourierAPI> 

tôi có thể xây dựng tất cả của nó nhưng không thể tìm thấy một cách để thiết lập các thuộc tính type tài liệu, đây là một phân khúc của lớp đối tượng

[XmlRoot("Root"), Serializable]  
public class Root  
{  
    [XmlElement("Method")]  
    public string method="RetrieveApplications";  
    [XmlElement("Options")]  
    public _Options Options;  
}  
public class _Options  
{ 
    [XmlElement("Filter")]  
    public _Filter Filter;  
} 
public class _Filter  
{ 
    [XmlElement("Times")]  
    public _Times Times;  
    [XmlElement("Documents")]  
    public string Documents;  
} 

mà mang lại cho tôi :

<Document>document name</Document> 

hơn:

<Document type="word">document name</Document> 

nhưng tôi không thể tìm được cách sửa lỗi này, vui lòng thông báo.

Cảm ơn

+0

Xin lỗi Marc ... bạn chắc hẳn chỉ có mà chỉnh sửa trong trước mắt tôi. – Kev

+0

Mark Gravell đã cứu ngày của tôi! :-) Cảm ơn bạn! –

Trả lời

56

Nơi nào bạn có type lưu trữ?

Thông thường bạn có thể có một cái gì đó như:

class Document { 
    [XmlAttribute("type")] 
    public string Type { get; set; } 
    [XmlText] 
    public string Name { get; set; } 
} 


public class _Filter  
{ 
    [XmlElement("Times")]  
    public _Times Times;  
    [XmlElement("Document")]  
    public Document Document;  
} 
+0

Cảm ơn các bạn, đã được sắp xếp, được đánh giá cao – user107779

+0

không làm việc cho tôi –

+0

Điều này thật tuyệt vời, mong đợi điều này phức tạp hơn nhiều. – Sizons

11

Lớp string không có một tài sản type, vì vậy bạn không thể sử dụng nó để tạo ra các kết quả mong muốn. Bạn nên tạo một lớp Document thay vì:

public class Document 
{ 
    [XmlText] 
    public string Name; 

    [XmlAttribute("type")] 
    public string Type; 
} 

Và bạn nên thay đổi Document tài sản để gõ Document

+0

Tôi đồng ý (sắp sửa gửi cùng một điều!) –

7

Có vẻ như bạn cần một lớp học thêm:

public class Document 
{ 
    [XmlAttribute("type")] 
    public string Type { get; set; } 
    [XmlText] 
    public string Name { get; set; } 
} 

đâu một thể hiện (trong ví dụ) sẽ có Type = "word"Name = "document name"; documents sẽ là List<Document>.

Bằng cách này - lĩnh vực công cộng là hiếm khi một ý tưởng tốt ...

Các vấn đề liên quan