XML 序列化不读取属性值

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)

你能帮我看看我在哪里遗漏了什么吗?``

ste*_*351 2

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