使用c#进行复杂元素的Xml反序列化

24 浏览
0 Comments

使用c#进行复杂元素的Xml反序列化

这个问题已经有了解决方法

如何反序列化XML文档

我在将我的XML字符串反序列化为对象时遇到了一些麻烦。我没有收到任何错误消息,但是值没有填充(值不是null,而只是\"\")。我看了一些类似问题的解决方案,但通常是因为人们没有定义[XmlRoot][XmlElement]

下面介绍一点我的XML字符串:

string xmlString = @""

下面是反序列化函数:

StandardAddress address = new StandardAddress();
using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
{
    try
    {
        address = (StandardAddress)new XmlSerializer(typeof(StandardAddress)).Deserialize(reader);
    }
    catch (InvalidOperationException x)
    {
        // String passed is not XML, simply return defaultXmlClass
    }
}
return address;

下面是对象声明的一部分:

[XmlRoot("results")]
public class StandardAddress
{
    [XmlElement(ElementName = "dpv_answer")]
    public string dpv_answer { get; set; }
    [XmlElement(ElementName = "zip")]
    public string zip { get; set; }
}

admin 更改状态以发布 2023年5月19日
0
0 Comments

每个元素都有属性,您正在尝试从中获取值。此外,属性是相同的,因此,像fcuesta建议的那样使用多个可序列化类不如使用单个类:

[XmlRoot("results")]
public class StandardAddress
{
    [XmlElement(ElementName = "dpv_answer")]
    public Element DpvAnswer { get; set; }
    [XmlElement(ElementName = "zip")]
    public Element Zip { get; set; }
}
public class Element
{
    [XmlAttribute("value")]
    public string Value { get; set; }
}

这对于相似的元素可以很有用。但是,如果您打算将元素更改为其自己的唯一模式,则它们需要分开,如fcuesta建议的那样。

0
0 Comments

dpv_answerzip是复杂的元素,而不仅仅是字符串。请尝试以下操作:

[XmlRoot("results")]
public class StandardAddress
{
    [XmlElement(ElementName = "dpv_answer")]
    public dpv_answer dpv_answer { get; set; }
    [XmlElement(ElementName = "zip")]
    public zip zip { get; set; }
}
public class dpv_answer
{
    [XmlAttribute("value")]
    public string Value { get; set; }
}
public class zip
{
    [XmlAttribute("value")]
    public string Value { get; set; }
}

0