我的xml字符串反序列化到我的对象时遇到了一些麻烦。我没有收到任何错误,但是值没有填充(值不是null
它们只是""
)。我已经查看了几个有相同问题的问题,但这些问题通常包括没有定义[XmlRoot]
或[XmlElement]
的人。
这是我的一些xml字符串:
string xmlString = @"<results><dpv_answer value=""Y"" /><zip value=""95118-4007"" /></results>"
以下是deseralize的功能:
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; }
}
答案 0 :(得分: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; }
}
答案 1 :(得分: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所建议的那样。