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