gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 01:56:24 27 4
gpt4 key购买 nike

我正在使用 asp.net (C#) 网站,我想 Deserialize XML使用 XmlSerializer 的字符串类(class)。

我的模型(.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 反序列化为对象时......像 PassengerName 这样的属性, Age , PhoneNo objModel等还是空白

谁能帮我在我的类(class)上设置正确的 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>

关于c# - 将 XML 反序列化为 C# XmlRoot 中的对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43840255/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com