2009-06-18 17 views
37

Ho un problema con serializzazione e oggetto, posso ottenere per creare tutti gli output corretti tranne per dove ho un elemento che ha bisogno di un valore e un attributo. Ecco l'output richiesto:Come aggiungere attributi per Serializzazione C# XML

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

posso costruire tutto questo, ma non riesco a trovare un modo per impostare l'attributo tipo di documento, ecco un segmento della classe dell'oggetto

[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;  
} 

che mi dà :

<Document>document name</Document> 

piuttosto che:

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

ma non riesco a trovare un modo per correggere questo, si prega di avvisare.

Grazie

+0

Spiacente Marc ... Deve aver appena ricevuto che modifica prima di me. – Kev

+0

Mark Gravell mi ha salvato la giornata! :-) Grazie! –

risposta

56

Dove avete la type memorizzati?

Normalmente si potrebbe avere qualcosa di simile:

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

Grazie Ragazzi, ordinati, molto apprezzati – user107779

+0

non funziona per me –

+0

Wow questo è sorprendente, mi aspettavo che fosse molto più complesso. – Sizons

11

La classe string non hanno una proprietà type, quindi non è possibile utilizzarlo per creare l'output desiderato. Si dovrebbe creare una classe Document invece:

public class Document 
{ 
    [XmlText] 
    public string Name; 

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

E si dovrebbe modificare la proprietà Document di digitare Document

+0

Concordo (stavo per presentare la stessa cosa!) –

7

Suona come avete bisogno di una classe in più:

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

Dove un'istanza (in l'esempio) avrebbe Type = "word" e Name = "document name"; documents sarebbe un List<Document>.

Tra l'altro - campi pubblici sono raramente una buona idea ...

Problemi correlati