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

我的xml字符串反序列化到我的对象有一些麻烦。 我没有得到任何错误,但值没有填充(值不为null它们只是"" )。 我看了几个有同样问题的问题,但这些问题通常包括没有定义[XmlRoot][XmlElement]

这是我的一些xml字符串:

 string xmlString = @"" 

这是deseralize的function:

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

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

您的每个元素都具有您尝试从中获取值的属性。 此外,属性是相同的,因此,如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所建议的那样。