Deserialize XML to object in C# XmlRoot is not working
asp.net, asp.net-mvc, c#, xml, xml-deserialization
Solution
The way your XML is defined, you would need to have two objects defined: - one for the `MedicalClearanceFormRoot` xml node - one for the `MedicalClearanceForm` xml node
So, you have two routes you could take: add the wrapper class or change your xml.
To add a wrapper class, you would need to have a class to represent `MedicalClearanceFormRoot` which has a property for the `MedicalClearanceForm` object. Then change your serializer class to be for the wrapper class. Here's an example:
[XmlRoot("MedicalClearanceFormRoot")]
public class Wrapper
{
public MedicalClearanceViewModel MedicalClearanceForm { get; set;}
}
public class MedicalClearanceViewModel
{
[XmlAttribute("PassengerName")]
public string PassengerName { get; set; }
[XmlAttribute("Gender")]
public string Gender { get; set; }
[XmlAttribute("Age")]
public string Age { get; set; }
[XmlAttribute("PhoneNo")]
public string PhoneNo { get; set; }
[XmlAttribute("Email")]
public string Email { get; set; }
[XmlAttribute("BookingRefNo")]
public string BookingRefNo { get; set; }
}
XmlSerializer serializer = new XmlSerializer(typeof(Wrapper));
using (TextReader reader = new StringReader(myXMLStringFromDB))
{
Wrapper objModel = (Wrapper)serializer.Deserialize(reader);
}
Option 2: Change your XML to look like this:
<MedicalClearanceFormRoot PassengerName="AAAAAAAAAAAAA" Age="11" PhoneNo="TTTTTTTTTTT" Email="ZZZZZZZZZZZZZZZZZZZ" BookingRefNo="11111111111111111111" >
</MedicalClearanceFormRoot>
Problem
I am using asp.net (C#) website, I want to `Deserialize` the `XML` string using `XmlSerializer` class. My Model (.cs file) ``` [XmlRoot("MedicalClearanceFormRoot")] public class MedicalClearanceViewModel { [XmlAttribute("PassengerName")] public string PassengerName { get; set; } [XmlAttribute("Gender")] public string Gender { get; set; } [XmlAttribute("Age")] public string Age { get; set; } [XmlAttribute("PhoneNo")] public string PhoneNo { get; set; } [XmlAttribute("Email")] public string Email { get; set; } [XmlAttribute("BookingRefNo")] public string BookingRefNo { get; set; } } ``` XML String ``` <MedicalClearanceFormRoot> <MedicalClearanceForm PassengerName="AAAAAAAAAAAAA" Age="11" PhoneNo="TTTTTTTTTTT" Email="ZZZZZZZZZZZZZZZZZZZ" BookingRefNo="11111111111111111111" /> </MedicalClearanceFormRoot> ``` Code to De-Serialize the XML to Object ``` string myXMLStringFromDB = GetXMLStringFromDb(); // this method will return XML from db. XmlSerializer serializer = new XmlSerializer(typeof(MedicalClearanceViewModel)); using (TextReader reader = new StringReader(myXMLStringFromDB)) { MedicalClearanceViewModel objModel = (MedicalClearanceViewModel)serializer.Deserialize(reader); } ``` But, the issue is when I De-serialize the XML to object using above code ... the properties like `PassengerName`, `Age`, `PhoneNo` Etc. are still blank in `objModel` Can someone can help me to set the proper XML Notations on my Class on can someone can help me to resolve this issue . Any help will be highly appreciated ! Thanks