pro*_*011 5 c# xml asp.net asp.net-mvc xml-deserialization
我使用asp.net(C#)的网站,我想Deserialize在XML字符串中使用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对象......像的属性PassengerName,Age,PhoneNo等方面都还是空白的objModel
有人可以帮助我在我的课程上设置适当的XML表示法吗?有人可以帮助我解决此问题。
任何帮助将不胜感激!谢谢
根据 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)
| 归档时间: |
|
| 查看次数: |
1626 次 |
| 最近记录: |