J'ai le xml suivant que je veux désérialiser à un objet.Deserializing XML aux objets qui a la liste des objets dans C#
<result>
<reporttype>2</reporttype>
<items>
<item>
<sku>0B0005</sku>
<style>0B0005.DAK.GREY</style>
<reason>Barcode cannot be moved to different SKUs</reason>
</item>
<item>
<sku>0B0006</sku>
<style>0B0006.DAK.GREY</style>
<reason>Barcode cannot be moved to different SKUs</reason>
</item>
</items>
</result>
Mais le code ci-dessous ne remplit pas la liste des éléments, quelqu'un peut-il me rappeler ce que je fais mal ici
string inputString = @"<result><reporttype>2</reporttype><items><item><sku>0B0005</sku><style>0B0005.DAK.GREY</style><reason>Barcode cannot be moved to different SKUs</reason></item><item><sku>0B0005</sku><style>0B0005.DAK.GREY</style><reason>Barcode cannot be moved to different SKUs</reason></item></items></result>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(inputString);
XmlSerializer serializer = new XmlSerializer(typeof(Result));
StringReader rdr = new StringReader(doc.InnerXml);
Result resultingMessage = (Result)serializer.Deserialize(rdr);
public enum ReportType {
[XmlEnum("0")]
InternalErrorReport,
[XmlEnum("1")]
ErrorReport,
[XmlEnum("2")]
InternalSuccessReport
}
[XmlRoot(ElementName = "result")]
public class Result {
[XmlElement(ElementName = "reporttype")]
public ReportType reportType { get; set; }
[XmlElement(ElementName = "items")]
public List<Item> items = new List<Item>();
public string error { get; set; }
public class Item {
[XmlElement(ElementName = "sku")]
string sku { get; set; }
[XmlElement(ElementName = "style")]
string style { get; set; }
[XmlElement(ElementName = "reason")]
string reason { get; set; }
}
}
Ou est-il une meilleure façon de le faire?
Vous n'avez pas ajouté l'attribut 'XmlElement' à la classe' Item', donc le sérialiseur ne sait pas que l'élément '- ' est une instance de classe 'Item'. –
Dai
Merci pour la réponse rapide, j'ai essayé, mais nous ne pouvons pas utiliser [XmlElement (ElementName = "item")] pour les classes, il est uniquement valide sur la propriété, le champ, ... – Ash
à '[XmlArray (" items ")] et [XmlArrayItem (" items ")]'. – Fabio