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.
SO625144
Normal
New
KFC
2018-03-08 13:52:21
1
GSX837420
Parts
13.54
84.49
10
2
AVF697420
Apparel
19.34
105.99
25
SO625145
Normal
New
Nandos
2018-03-09 08:56:21
1
// 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 GetAllOrders()
{
var serializer = new XmlSerializer(typeof(List));
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)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 orders)
{
var serializer = new XmlSerializer(typeof(List));
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 OrderLines { get; set; }
public string OrderNumber { get; set; }
}
}
Guest UserPosted Jun 6, 2023, 6:17 AM
Hi Mohamed
I see where there issue now is, so these model must be on the same file? What i did i created them individual file than having them in one file.
Mohamed Azarudeen ZPosted Jun 5, 2023, 8:25 PM
The code you provided seems to be missing the
OrderHeaderandOrderLineclasses, which are necessary for deserialization. Make sure you have defined these classes properly. Here's an example of how you can define them: