1

我在将 xml 字符串反序列化为对象时遇到了一些麻烦。我没有收到任何错误,但没有填充值(这些值不是null它们只是"")。我查看了一些具有相同问题的问题,但这些问题通常由没有定义[XmlRoot][XmlElement]定义的人组成。

这是我的一些 xml 字符串:

string xmlString = @"<results><dpv_answer value=""Y"" /><zip value=""95118-4007"" /></results>"

这是反序列化的功能:

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; }
}
4

2 回答 2

4

dpv_answer并且zip是复杂的元素,而不仅仅是一个字符串。尝试以下操作:

[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; }
}
于 2013-08-23T19:04:59.673 回答
3

您的每个元素都有您试图从中获取值的属性。此外,属性是相同的,因此您可以使用单个类,而不是像 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 所建议的那样。

于 2013-08-23T19:14:25.137 回答