Monday, April 15, 2013

Serializing object to XML while preserving white-space


void Main()
{
var s = XmlSerialize(new C1{Value= "  "});
tblTests.First (t => t.id == 1).val = XElement.Parse(s);
SubmitChanges();

var dbStr = tblTests.First (t => t.id == 1).val.ToString();
var obj = XmlDeSerialize(dbStr, typeof(C1));
(((C1)obj).Value == "  ");
}

internal static string XmlSerialize(object o)
{
var serializer = new XmlSerializer(o.GetType());
            using (var sw = new StringWriter())
            using (var xw = new XmlTextWriter(sw))
            {
                serializer.Serialize(xw, o);
                return sw.GetStringBuilder().ToString();
            }
}

internal static object XmlDeSerialize(string s, Type t)
{
var serializer = new XmlSerializer(t);
using (var sr = new StringReader(s))
            using(var xmlTxtReader = new XmlTextReader(sr))
{
return serializer.Deserialize(xmlTxtReader);
}
}

public class C1
{
[XmlAttribute("xml:space")]
public String SpacePreserve = "preserve";

public string Value{get;set;}
}