Last active
September 21, 2016 17:36
-
-
Save ChrisMoney/0baff9f5dc1fa757d9b3a2d648287b17 to your computer and use it in GitHub Desktop.
XML Serializer - Deserializer. No XSD involved.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protected override void WriteRequest(object data, Stream stream) | |
{ | |
var serializer = SerializerHelper.Get(data.GetType()); | |
var ns = new XmlSerializerNamespaces(new[] { new XmlQualifiedName("", "") }); //strip all default namespaces. | |
var settings = new XmlWriterSettings { Encoding = new UTF8Encoding(false), OmitXmlDeclaration = false }; | |
using (var xw = XmlTextWriter.Create(stream, settings)) | |
{ | |
if (settings.OmitXmlDeclaration) | |
{ | |
//'encoding' in the xml declaration used to be forced to all-caps. As far as I can tell, there's no reason for it. | |
xw.WriteRaw("<?xml version=\"1.0\" encoding=\"UTF-8\">"); | |
} | |
serializer.Serialize(xw, data, ns); | |
xw.WriteRaw("<EOF>"); | |
} | |
} | |
protected override T ReadResponse<T>(Stream stream) | |
{ | |
XmlTextReader reader = null; | |
//Note: XmlTextReader likes to dispose the stream, so make sure you don't need it anymore. (Logs still work though) | |
// Also, I'm not 100% sure XmlTextReader needs to be disposed at all if the base stream is handled elsewhere. | |
// Probably need to look into it. | |
try | |
{ | |
reader = new XmlTextReader(stream); | |
reader.MoveToContent(); | |
XmlReader sub = reader.ReadSubtree(); //Read just the root element, not the subsequent <EOF> | |
XmlSerializer serializer = SerializerHelper.Get(typeof(T)); | |
return (T) serializer.Deserialize(sub); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment