Bry*_*cob 5 c# xml serialization
我正在尝试将 XML 序列化为 PostalAddress 类。邮政地址看起来像这样
public class PostalAddress
{
public string DeliverTo { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
[XmlAttribute("isoCountryCode")]
public string CountryCode { get; set; }
public string Country { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
输入的 XML 文档是
<PostalAddress>
<DeliverTo>SomeBody</DeliverTo>
<Street>Some Street Address</Street>
<City>MyCity</City>
<PostalCode>US-1013</PostalCode>
<Country isoCountryCode="US">US</Country>
</PostalAddress>
Run Code Online (Sandbox Code Playgroud)
我用于序列化的 C# 代码是
现在,反序列化后,我可以在相应的属性中看到 XML 中的值,但缺少我想要映射到属性 CountryCode 的属性值。
var serializer = new XmlSerializer(typeof(PostalAddress));
var xmlReaderSettings = new XmlReaderSettings { DtdProcessing = DtdProcessing.Parse}
PostalAddress postalAddress;
using (var reader = XmlReader.Create(new StringReader(inputDocument.ToString()), xmlReaderSettings))
{
postalAddress= (PostalAddress)serializer.Deserialize(reader);
}
Run Code Online (Sandbox Code Playgroud)
你能帮我看看我在哪里遗漏了什么吗?``
XmlAttribute
在您使用它的上下文中不起作用,因为它正在查看PostalAddress
没有属性的 element 。您想要的属性isoCountryCode
位于子元素 上Country
。
为了实现这一点,您需要为该Country
元素定义另一个类。例如,您可以使用如下所示的类。
public class PostalAddress
{
public string DeliverTo { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
public Country Country { get; set; }
}
[XmlRoot("Country")]
public class Country
{
[XmlAttribute("isoCountryCode")]
public string IsoCountryCode { get; set;}
[XmlText]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您无法更改类结构,则可以使用接口查看自定义反序列化IXmlSerializable
。
归档时间: |
|
查看次数: |
1925 次 |
最近记录: |