将XML反序列化为C#XmlRoot中的对象不起作用

pro*_*011 5 c# xml asp.net asp.net-mvc xml-deserialization

我使用asp.net(C#)的网站,我想DeserializeXML字符串中使用XmlSerializer类。

我的模型(.cs文件)

[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; } 
}
Run Code Online (Sandbox Code Playgroud)

XML字串

<MedicalClearanceFormRoot>
  <MedicalClearanceForm PassengerName="AAAAAAAAAAAAA" Age="11" PhoneNo="TTTTTTTTTTT" Email="ZZZZZZZZZZZZZZZZZZZ" BookingRefNo="11111111111111111111" />  
</MedicalClearanceFormRoot>
Run Code Online (Sandbox Code Playgroud)

将XML反序列化为对象的代码

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);
              }
Run Code Online (Sandbox Code Playgroud)

但是,问题是,当我使用上面的代码反序列化的XML对象......像的属性PassengerNameAgePhoneNo等方面都还是空白的objModel

有人可以帮助我在我的课程上设置适当的XML表示法吗?有人可以帮助我解决此问题。

任何帮助将不胜感激!谢谢

Joh*_*ght 5

根据 XML 的定义方式,您需要定义两个对象: - 一个用于MedicalClearanceFormRootxml 节点 - 一个用于MedicalClearanceFormxml 节点

因此,您可以采取两条路线:添加包装类或更改 xml。

要添加包装类,您需要有一个类来表示MedicalClearanceFormRoot哪个类具有该对象的属性MedicalClearanceForm。然后将序列化器类更改为包装器类。这是一个例子:

[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);
        }
Run Code Online (Sandbox Code Playgroud)

选项 2:将 XML 更改为如下所示:

<MedicalClearanceFormRoot PassengerName="AAAAAAAAAAAAA" Age="11" PhoneNo="TTTTTTTTTTT" Email="ZZZZZZZZZZZZZZZZZZZ" BookingRefNo="11111111111111111111" >  
</MedicalClearanceFormRoot>
Run Code Online (Sandbox Code Playgroud)