1

How do I serialize a .NET object into XML and assign the XML string to variable?

Example:

private void SerializeObject(string filename)
{
    Console.WriteLine("Writing With Stream");

    XmlSerializer serializer =
    new XmlSerializer(typeof(OrderedItem));
    OrderedItem i = new OrderedItem();
    i.ItemName = "Widget";
    i.Description = "Regular Widget";
    i.Quantity = 10;
    i.UnitPrice = (decimal) 2.30;
    i.Calculate();

    // Create a FileStream to write with.
    Stream writer = new FileStream(filename, FileMode.Create);

    // Serialize the object, and close the TextWriter
    serializer.Serialize(writer, i);

    //Assign the serialized XML to a variable here.
    //For example, var serialized=serializer.serialized(i);

    writer.Close();
}
Peter Mortensen
  • 30,030
  • 21
  • 100
  • 124
Nil Pun
  • 16,577
  • 35
  • 160
  • 286
  • 6
    Have a look at this: http://stackoverflow.com/questions/1138414/can-i-serialize-xml-straight-to-a-string-instead-of-a-stream-with-c – Quasdunk Aug 04 '11 at 06:55
  • The example here works: https://www.fluxbytes.com/csharp/serialize-an-object-to-string-and-from-string-back-to-object/ – Andrew Jens Sep 18 '19 at 05:32

4 Answers4

4
XmlSerializer ser = new XmlSerializer(typeof(Test));
Test t = new Test() { Id = 1 };

MemoryStream ms = new MemoryStream();
ser.Serialize(ms, t);
ms.Position = 0;

StreamReader r = new StreamReader(ms);
string res = r.ReadToEnd();

EDIT: @Quasdunk not only beat me, but with a better code sample

sternr
  • 5,794
  • 9
  • 37
  • 62
2

The easiest thing to do here is to use a StringWriter:

var sw = new StringWriter();
serializer.Serialize(sw, obj);
string xml = sw.ToString();
Marc Gravell
  • 976,458
  • 251
  • 2,474
  • 2,830
0
using (StringWriter sw = new StringWriter() && XmlSerializer xml = new XmlSerializer(typeof(OrderedItem)))
{
    xml.Serializer(sw, i);
    string result = sw.ToString();
}

This assumes that i is an OrderedItem (as per your post).

foxy
  • 7,501
  • 2
  • 29
  • 34
-1

This is how I do it:

using(var mem = new MemoryStream()){
    serializer.Serialize(mem,"");
    String xml = Encoding.UTF8.GetString(mem.ToArray());
}
Peter Mortensen
  • 30,030
  • 21
  • 100
  • 124
Jeffers
  • 185
  • 2
  • 7