-1

I have 15k records in datatable and I am unable to convert datatable to xml, getting outofmemory exception in asp.net c#.

XmlDocument xmlDoc = new XmlDocument();
using (MemoryStream memoryStream = new MemoryStream()) {
    using (TextWriter streamWriter = new StreamWriter(memoryStream)) {
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(DataTable));
        xmlSerializer.Serialize(streamWriter, dt);

        if (memoryStream.Position > 0) {
            memoryStream.Position = 0;
        }

        xmlDoc.Load(memoryStream);
    }
}
Filburt
  • 17,626
  • 12
  • 64
  • 115
Dhanaraj
  • 27
  • 1
  • 5
  • Please provide sample code of your issue. – Lukasz Szczygielek Mar 17 '20 at 12:03
  • XmlDocument xmlDoc = new XmlDocument(); using (MemoryStream memoryStream = new MemoryStream()) { using (TextWriter streamWriter = new StreamWriter(memoryStream)) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(DataTable)); xmlSerializer.Serialize(streamWriter, dt); if (memoryStream.Position > 0) { memoryStream.Position = 0; } xmlDoc.Load(memoryStream); } } – Dhanaraj Mar 17 '20 at 12:04
  • Does this answer your question? [How can I convert a DataTable to an XML file in C#?](https://stackoverflow.com/questions/5259759/how-can-i-convert-a-datatable-to-an-xml-file-in-c) – Lucifer Mar 17 '20 at 12:05
  • What i am missing the code, it is throwing exception at xmlSerializer.Serialize(streamWriter, dt); line. – Dhanaraj Mar 17 '20 at 12:15
  • How many records are being serialized? Looks like you're trying to serialize a huge amount of data into a MemoryStream, and as a result, running out of memory. – Pranav Negandhi Mar 17 '20 at 13:35

1 Answers1

0

you can try use this method DataTable.WriteXml if your version .net is permit this

DataSet ds = new DataSet();
DataTable customerTable = GetCustomers();
DataTable orderTable = GetOrders();

ds.Tables.Add(customerTable);
ds.Tables.Add(orderTable);
ds.Relations.Add("CustomerOrder",
    new DataColumn[] { customerTable.Columns[0] },
    new DataColumn[] { orderTable.Columns[1] }, true);

System.IO.StringWriter writer = new System.IO.StringWriter();
customerTable.WriteXml(writer, XmlWriteMode.WriteSchema, false);
AndreyShiryaev
  • 175
  • 3
  • 13