J'ai un problème avec la sérialisation et l'objet, je peux l'obtenir pour créer toutes les sorties correctes, sauf lorsque j'ai un élément qui a besoin d'une valeur et d'un attribut. Voici la sortie requise:
<Root>
<Method>Retrieve</Method>
<Options>
<Filter>
<Times>
<TimeFrom>2009-06-17</TimeFrom>
</Times>
<Document type="Word">document name</Document>
</Filter>
</Options>
</AdCourierAPI>
Je peux tout construire mais je ne trouve pas de moyen de définir l'attribut Type de document, voici un segment de la classe d'objets
[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;
}
ce qui me donne:
<Document>document name</Document>
plutôt que:
<Document type="Word">document name</Document>
mais je ne peux pas trouver un moyen de corriger cela, veuillez conseiller.
Merci
Où avez-vous le type
stocké?
Normalement, vous pourriez avoir quelque chose comme:
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;
}
La classe string
n'a pas de propriété type
, vous ne pouvez donc pas l'utiliser pour créer la sortie souhaitée. Vous devez plutôt créer une classe Document
:
public class Document
{
[XmlText]
public string Name;
[XmlAttribute("type")]
public string Type;
}
Et vous devez changer la propriété Document
pour taper Document
Il semble que vous ayez besoin d'un cours supplémentaire:
public class Document
{
[XmlAttribute("type")]
public string Type { get; set; }
[XmlText]
public string Name { get; set; }
}
Où une instance (dans l'exemple) aurait Type = "Word"
et Name = "document name"
; documents
serait un List<Document>
.
Soit dit en passant - les domaines publics sont rarement une bonne idée ...