如何在将 xml 反序列化为 c# 对象时获取单个 xml 元素的多个值?
Posted
技术标签:
【中文标题】如何在将 xml 反序列化为 c# 对象时获取单个 xml 元素的多个值?【英文标题】:How do I get multiple value of single xml element while deserializing xml to c# object? 【发布时间】:2021-03-16 20:11:41 【问题描述】:我正在从 xml 文件获取 xml 数据到 c# 对象,如下所示:
XML:
<OrderItem>
<OrderItemCode>1234</OrderItemCode>
<ASIN>dfsdfcs</ASIN>
<SKU>5MJ1L3</SKU>
<ItemStatus>Unshipped</ItemStatus>
<ProductName>xcv/ProductName>
<Quantity>1</Quantity>
<ItemPrice>
<Component>
<Type>Principal</Type>
<Amount currency="CAD">7.99</Amount>
</Component>
</ItemPrice>
</OrderItem>
c#模型:
[XmlRootAttribute("OrderItem")]
public class OrderItem
[XmlElement("OrderItemCode")]
public string OrderItemCode get; set;
[XmlElement("ASIN")]
public string Asin get; set;
[XmlElement("SKU")]
public string Sku get; set;
[XmlElement("ItemStatus")]
public string ItemStatus get; set;
[XmlElement("ProductName")]
public string ProductName get; set;
[XmlElement("Quantity")]
public long Quantity get; set;
[XmlElement("ItemPrice")]
public ItemPrice Item_Price get; set;
[XmlElement("PriceDesignation")]
public string PriceDesignation get; set;
[XmlElement("Promotion")]
public Promotion Promotion get; set;
public partial class ItemPrice
[XmlElementAttribute("Component")]
public List<Component> Component get; set;
public partial class Component
[XmlElement("Type")]
public string Type get; set;
[XmlElement("Amount")]
public Amount Amount get; set;
public partial class Amount
[XmlAttribute("currency")]
public string Currencies get; set;
[XmlAttribute("#text")]
public string Price get; set;
反序列化:
XmlSerializer serializer = new XmlSerializer(typeof(OrderItem));
TextReader reader = new StreamReader(reportPath);
OrderItem ordersListXML = (OrderItem)serializer.Deserialize(reader);
在这里,我想通过反序列化为 c# 对象来获取 <Amount currency="CAD">7.99</Amount>
的值,并且我能够将元素 <Amount currency="CAD">7.99</Amount>
的属性“货币”的值获取到“货币”属性但无法获取文本“ 7.99" 的 Element <Amount currency="CAD">7.99</Amount>
到反序列化后我的 c# 对象中的 "Price" 属性。
谁能帮我获得价值!
【问题讨论】:
【参考方案1】:XmlTextAttribute ([XmlText]
) 允许将条目的值反序列化为字段。所以
<Amount currency="CAD">7.99</Amount>
可以反序列化到类
public class Amount
[XmlAttribute("currency")]
public string Currencies get; set;
[XmlText]
public string Price get; set;
【讨论】:
谢谢。有效。我现在可以拿到价格了。以上是关于如何在将 xml 反序列化为 c# 对象时获取单个 xml 元素的多个值?的主要内容,如果未能解决你的问题,请参考以下文章
在将 json 反序列化为对象时,使用 jackson 将 asp.net / MS 专有 json Dateformat 转换为 java8 LocalDateTime