[英]XML Serialization not reading Attribute values
我正在嘗試將 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; }
}
輸入的 XML 文檔是
<PostalAddress>
<DeliverTo>SomeBody</DeliverTo>
<Street>Some Street Address</Street>
<City>MyCity</City>
<PostalCode>US-1013</PostalCode>
<Country isoCountryCode="US">US</Country>
</PostalAddress>
我用於序列化的 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);
}
你能幫我在這里哪里遺漏東西嗎?``
XmlAttribute
在您使用它的上下文中不起作用,因為它正在查看沒有屬性的元素PostalAddress
。 您想要的屬性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; }
}
或者,如果您無法更改類結構,則可以使用IXmlSerializable
接口查看自定義反序列化。
您必須使用兩個名為 CountryCode 和 Text 的屬性為 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; }
}
public class Country
{
[XmlAttribute("isoCountryCode")]
public string CountryCode { get; set; }
[XmlText]
public string Description { get; set; }
}
使用XmlAttribute
-attribute 時,該屬性應位於與類對應的元素上。 換句話說,如果您像這樣構造 XML 文檔,則該屬性將被反序列化為屬性:
<PostalAddress isoCountryCode="US">...</PostalAddress>
但是,如果為國家/地區添加另一個類,則可以正確反序列化 XML:
public class PostalAddress
{
public string DeliverTo { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
[XmlElement("Country")]
public CountryCode CountryCode;
}
public class CountryCode
{
[XmlAttribute("isoCountryCode")]
public string Code { get; set; }
[XmlText]
public string Country { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.