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 List:
[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?
NET objects (deserialize) A common way to deserialize JSON is to first create a class with properties and fields that represent one or more of the JSON properties. Then, to deserialize from a string or a file, call the JsonSerializer. Deserialize method.
Yes, you can tell the XmlSerializer to ignore namespaces during de-serialization.
Serialization is a process by which an object's state is transformed in some serial data format, such as XML or binary format. Deserialization, on the other hand, is used to convert the byte of data, such as XML or binary data, to object type.
Try changing the attributes on your list to this:
[XmlArray(ElementName="Updates")]
[XmlArrayItem(ElementName="Update")]
public List<Update> Updates { get; set; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With