Beware: XmlSerialization via a StringBuilder/StringWriter is not compatible with XPath

by alski 31. October 2005 21:28

I recently wanted to use XmlSerialization for bi-directional conversion of data, but unfortunately when trying to then xPath the serialised data I hit a minor stumbling block.

StringBuilder sb = new StringBuilder();
StringWriter writer = new StringWriter(sb);
XmlSerializer serializer = new XmlSerializer(...);
serializer.Serialize(writer, ...);

//OK This sucks. Default XML serialization is UTF-16!!!!            

However with a small re-write

//First write to a MemoryStream using an expandable buffer
MemoryStream outStream = new MemoryStream();
using(StreamWriter writer = new StreamWriter(outStream,Encoding.UTF8))
{
    XmlSerializer serializer = new XmlSerializer(typeof(Envelope), GetTypes());
    serializer.Serialize(writer, envelope);
}
outStream.Close();

//Then read in from a new memoryStream using the same buffer, because we had to close the last one.
MemoryStream inStream = new MemoryStream(outStream.GetBuffer());
StreamReader sr = new StreamReader(inStream);
string xml = sr.ReadToEnd();

//and convert to doc
_document = new XmlDocument();
_document.LoadXml(xml);

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Powered by BlogEngine.NET 1.4.5.0
Theme by Mads Kristensen

RecentComments

Comment RSS