serialize serializar namespace example deserialize deserializar c# serialization xmlserializer

c# - serializar - XmlSerializer.Deserialize en un elemento de Lista<>



xmlserializer serialize (1)

He probado todas las soluciones que pude encontrar en SO y en otros lugares, pero parece que no entiendo por qué esto no funciona.

La deserialización directa de una cadena XML en un objeto, el objeto tiene una propiedad: una Lista:

[XmlTypeAttribute(AnonymousType = true)] public class UpdateData { [XmlArrayItem(ElementName = "Updates")] public List<Update> Updates { get; set; } public UpdateData() { Updates = new List<Update>(); } } public class Update { [XmlElement(ElementName = "MemberID")] public int MemberID { get; set; } [XmlElement(ElementName = "AnalysisID")] public int AnalysisID { get; set; } [XmlElement(ElementName = "MemberName")] public string MemberName { get; set; } [XmlElement(ElementName = "RecordDate")] public DateTime RecordDate { get; set; } }

Aquí está el código de deserialización:

private object DeserialzeXml(string xml) { var xmlSer = new XmlSerializer(typeof(UpdateData), new XmlRootAttribute("UpdateData")); var stringReader = new StringReader(xml); return xmlSer.Deserialize(stringReader); }

Y aquí está el XML:

<?xml version="1.0" encoding="utf-8" ?> <UpdateData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Updates> <Update> <MemberID>1</MemberID> <AnalysisID>1</AnalysisID> <MemberName>XXXXXXXXXXXXX</MemberName> </Update> <Update> <MemberID>1</MemberID> <AnalysisID>2</AnalysisID> <MemberName>YYYYYYYYYYYYY</MemberName> </Update> <Update> <MemberID>1</MemberID> <AnalysisID>3</AnalysisID> <MemberName>ZZZZZZZZZZZZ</MemberName> </Update> </Updates> </UpdateData>

Este código compila y ejecuta, y devuelve un objeto de tipo UpdateData, pero la propiedad Updates está vacía. ¿Algunas ideas?


Intenta cambiar los atributos en tu lista a esto:

[XmlArray(ElementName="Updates")] [XmlArrayItem(ElementName="Update")] public List<Update> Updates { get; set; }