Reputation: 10713
This is my xml:
<?xml version="1.0"?>
<orders>
<order>
<customer_id>5675757</customer_id>
<order_code>6456</order_code>
<products>
<product>
<product_item_code>577868</product_item_code>
<product_item_amount>22</product_item_amount>
</product>
</products>
</order>
</orders>
And this is my class:
[XmlRoot(ElementName = "orders")]
public class Orders
{
public List<OrderModel> OrdersList { get; set; }
}
[XmlRoot(ElementName = "order")]
public class OrderModel
{
[XmlElement(ElementName = "customer_id")]
public string CustomerId { get; set; }
[XmlElement(ElementName = "order_code")]
public string OrderCode { get; set; }
[XmlElement(ElementName = "products")]
public List<Product> products { get; set; }
}
[XmlRoot(ElementName = "product")]
public class Product
{
[XmlElement(ElementName = "product_item_code")]
public string product_item_code { get; set; }
[XmlElement(ElementName = "product_item_amount")]
public string product_item_amount { get; set; }
}
And this is my code:
using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
{
var serializer = new XmlSerializer(typeof(Orders));
var orders = (Orders)serializer.Deserialize(fileStream);
}
But it returns 0 elements. I know I am missing something obvious but I don't know what.
Upvotes: 1
Views: 66
Reputation: 8545
Modify your classes as below and it will work.
[XmlRoot(ElementName = "orders")]
public class Orders
{
[XmlElement(ElementName = "order")]
public List<OrderModel> OrdersList { get; set; }
}
public class OrderModel
{
[XmlElement(ElementName = "customer_id")]
public string CustomerId { get; set; }
[XmlElement(ElementName = "order_code")]
public string OrderCode { get; set; }
[XmlArray(ElementName = "products")]
[XmlArrayItem(ElementName = "product")]
public List<Product> products { get; set; }
}
public class Product
{
[XmlElement(ElementName = "product_item_code")]
public string product_item_code { get; set; }
[XmlElement(ElementName = "product_item_amount")]
public string product_item_amount { get; set; }
}
Upvotes: 0
Reputation: 2564
Change you class Orders
and OrderModel
:
[XmlRoot(ElementName = "orders")]
public class Orders
{
[XmlElement(ElementName = "order")]
public List<OrderModel> OrdersList { get; set; }
}
[XmlRoot(ElementName = "order")]
public class OrderModel
{
[XmlElement(ElementName = "customer_id")]
public string CustomerId { get; set; }
[XmlElement(ElementName = "order_code")]
public string OrderCode { get; set; }
[XmlArray(ElementName = "products")]
[XmlArrayItem(ElementName = "product")]
public List<Product> products { get; set; }
}
Then it should work
Upvotes: 2