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,738
  • 21
  • 105
  • 131
Nil Pun
  • 17,035
  • 39
  • 172
  • 294
  • 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
  • 6,216
  • 9
  • 39
  • 63
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
  • 1,026,079
  • 266
  • 2,566
  • 2,900
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,599
  • 2
  • 30
  • 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,738
  • 21
  • 105
  • 131
Jeffers
  • 183
  • 2
  • 7