Hi Team
I have xml data structure and method to read this structure, but i often get an exception of deserilization that is not correct and need some help.
<SalesOrder>
<OrderHeader>
<OrderNumber>SO625144</OrderNumber>
<OrderType>Normal</OrderType>
<OrderStatus>New</OrderStatus>
<CustomerName>KFC</CustomerName>
<CreateDate>2018-03-08 13:52:21</CreateDate>
</OrderHeader>
<OrderLine>
<LineNumber>1</LineNumber>
<ProductCode>GSX837420</ProductCode>
<ProductType>Parts</ProductType>
<CostPrice>13.54</CostPrice>
<SalesPrice>84.49</SalesPrice>
<Quantity>10</Quantity>
</OrderLine>
<OrderLine>
<LineNumber>2</LineNumber>
<ProductCode>AVF697420</ProductCode>
<ProductType>Apparel</ProductType>
<CostPrice>19.34</CostPrice>
<SalesPrice>105.99</SalesPrice>
<Quantity>25</Quantity>
</OrderLine>
</SalesOrder>
<SalesOrder>
<OrderHeader>
<OrderNumber>SO625145</OrderNumber>
<OrderType>Normal</OrderType>
<OrderStatus>New</OrderStatus>
<CustomerName>Nandos</CustomerName>
<CreateDate>2018-03-09 08:56:21</CreateDate>
</OrderHeader>
<OrderLine>
<LineNumber>1</LineNumber>
</OrderLine>
</SalesOrder>
// deserializing xml
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Hosting;
using OrderApplicationXML.Models;
using System.Xml.Serialization;
using System.IO;
using System.Xml;
namespace OrderApplicationXML.Data_Access_Layer
{
public class OrderXmlDataAccess
{
// declaring some objects for memory allocations.
private static string FilePath => @"C:\Users\Zux\source\repos\OrderApplicationXML\OrderApplicationXML\OrderLine.xml";
// constructor.
public static List<SalesOrder> GetAllOrders()
{
var serializer = new XmlSerializer(typeof(List<SalesOrder>));
using (var stream = new FileStream(FilePath, FileMode.Open))
{
var xmlReaderSettings = new XmlReaderSettings()
{
CloseInput = true,
IgnoreWhitespace = true,
IgnoreComments = true
};
using (XmlReader xmlReader = XmlReader.Create(stream, xmlReaderSettings))
{
return (List<SalesOrder>)serializer.Deserialize(xmlReader);
}
}
}
// get order.
public static SalesOrder GetOrderById(string orderNumber)
{
var orders = GetAllOrders();
return orders.FirstOrDefault(o => o.OrderNumber == orderNumber);
}
// add an order.
public static void AddOrder(SalesOrder order)
{
var orders = GetAllOrders();
orders.Add(order);
SaveOrders(orders);
}
// save orders.
private static void SaveOrders(List<SalesOrder> orders)
{
var serializer = new XmlSerializer(typeof(List<SalesOrder>));
using(var stream = new FileStream(FilePath, FileMode.Create))
{
serializer.Serialize(stream, orders);
}
}
//update an existing order.
public static void UpdateOrder(SalesOrder order)
{
var orders = GetAllOrders();
var existingOrder = orders.FirstOrDefault(o => o.OrderNumber == order.OrderNumber);
if(existingOrder != null)
{
orders.Remove(existingOrder);
orders.Add(order);
SaveOrders(orders);
}
}
// delete an order.
public static void DeleteOrder(string orderNumber)
{
var orders = GetAllOrders();
var existingOrder = orders.FirstOrDefault(o => o.OrderNumber == orderNumber);
if(existingOrder !=null)
{
orders.Remove(existingOrder);
SaveOrders(orders);
}
}
}
}
// controller
public ActionResult Delete(string id)
{
var order = OrderXmlDataAccess.GetOrderById(id);
if(order == null)
{
}
return View(order);
}
// model
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace OrderApplicationXML.Models
{
public class SalesOrder
{
public OrderHeader OrderHeader { get; set; }
public List<OrderLine> OrderLines { get; set; }
public string OrderNumber { get; set; }
}
}