XmlSerializer.Deserialize on a List<> item
I've tried all the solutions I could find on SO and elsewhere, but can't seem to figure out why this is not working.
Straightforward deserialization of an XML string into an object, the object has one property - a Li开发者_运维百科st:
[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; }
}
Here is the deserialize code:
private object DeserialzeXml(string xml)
{
var xmlSer = new XmlSerializer(typeof(UpdateData), new XmlRootAttribute("UpdateData"));
var stringReader = new StringReader(xml);
return xmlSer.Deserialize(stringReader);
}
And here is the 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>
This code compiles and runs, and returns an object of type UpdateData, but the Updates property is empty. Any ideas?
Your Updates
list is serialized with an outer container element <Updates>
and inner item elements <Update>
so change the attributes on your list to this:
[XmlArray(ElementName="Updates")]
[XmlArrayItem(ElementName="Update")]
public List<Update> Updates { get; set; }
XmlArrayAttribute
+ XmlArrayItemAttribute
should be used when serializing a collection with an outer container element. XmlElementAttribute
should be used when there is no outer container.
精彩评论