繁体   English   中英

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

[英]Deserialize XML to object in C# XmlRoot is not working

我正在使用asp.net(C#)网站,我想使用XmlSerializerDeserialize XML字符串。

我的模型(.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; } 
}

XML字串

<MedicalClearanceFormRoot>
  <MedicalClearanceForm PassengerName="AAAAAAAAAAAAA" Age="11" PhoneNo="TTTTTTTTTTT" Email="ZZZZZZZZZZZZZZZZZZZ" BookingRefNo="11111111111111111111" />  
</MedicalClearanceFormRoot>

将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);
              }

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

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

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

定义XML的方式,您需要定义两个对象:-一个用于MedicalClearanceFormRoot xml节点-一个用于MedicalClearanceForm xml节点

因此,您可以采取两种方法:添加包装器类或更改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);
        }

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

<MedicalClearanceFormRoot PassengerName="AAAAAAAAAAAAA" Age="11" PhoneNo="TTTTTTTTTTT" Email="ZZZZZZZZZZZZZZZZZZZ" BookingRefNo="11111111111111111111" >  
</MedicalClearanceFormRoot>

我已经创建了一个示例,其代码将与下面的完全一样。 您的模型不正确。

 public class MedicalClearanceForm
{
    [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; }
}
[XmlRoot("MedicalClearanceFormRoot")]
public class MedicalClearanceFormRoot
{


    [XmlElement("MedicalClearanceForm")]
    public MedicalClearanceForm MedicalClearanceForm { get; set; }


}
class Program
{
    static void Main(string[] args)
    {
        string myXMLStringFromDB = @"<MedicalClearanceFormRoot><MedicalClearanceForm PassengerName = 'AAAAAAAAAAAAA' Age = '11' PhoneNo = 'TTTTTTTTTTT' Email = 'ZZZZZZZZZZZZZZZZZZZ' BookingRefNo = '11111111111111111111' /></MedicalClearanceFormRoot >";

        XmlSerializer serializer = new XmlSerializer(typeof(MedicalClearanceFormRoot));
        using (TextReader reader = new StringReader(myXMLStringFromDB))
        {
            MedicalClearanceFormRoot objModel = (MedicalClearanceFormRoot)serializer.Deserialize(reader);
        }

    }
}

我相信,要满足指定的XML,您将需要此类结构。

[XmlRoot("MedicalClearanceFormRoot")]
public class MedicalClearanceViewModel
{
    public MedicalClearanceFormElement MedicalClearanceForm { get; set; }
}

[XmlElement]
public class MedicalClearanceFormElement
{
    [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; } 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM