Как мне получить множественное значение одного элемента xml при десериализации xml в объект c #?

#c# #xml #xml-serialization #xml-attribute #xmlelement

#c# #xml #xml-сериализация #xml-атрибут #xmlelement

Вопрос:

Я получаю 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);

 

Здесь я хочу получить значения <Amount currency="CAD">7.99</Amount> путем десериализации в объект c #, и я могу получить значение атрибута «currency» элемента <Amount currency="CAD">7.99</Amount> в свойство «Currencies», но не могу получить текст «7.99» элемента <Amount currency="CAD">7.99</Amount> в свойство «Price» в моем объекте c # после десериализации.

Кто-нибудь может помочь мне получить значение!

Ответ №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; }
}
 

Комментарии:

1. Спасибо. Это сработало. Теперь я могу получить цену.