I would like to invoke XmlSerializer.Deserialize
passing it an XDocument
. It can take a Stream
, an XmlReader
or a TextReader
.
Can I generate one of the above from XDocument
without actually dumping the XDocument
into some intermediate store, such as a MemoryStream
?
It seems that what I'm after is an implementation of XmlReader
that works with an XDocument
. I can't find one though.
Yes, you can tell the XmlSerializer to ignore namespaces during de-serialization.
The XmlSerializer creates C# (. cs) files and compiles them into . dll files in the directory named by the TEMP environment variable; serialization occurs with those DLLs. These serialization assemblies can be generated in advance and signed by using the SGen.exe tool.
You can use XDocument.CreateReader()
to create an XmlReader
that reads the contents of the XDocument
.
Equivalently, the following will work too.
XmlReader GetReader(XDocument doc) { return doc.Root.CreateReader(); }
Here's a utility to serialize and deserialize objects to/from XDocument.
XDocument doc = SerializationUtil.Serialize(foo); Foo foo = SerializationUtil.Deserialize<Foo>(doc);
Here's the class:
public static class SerializationUtil { public static T Deserialize<T>(XDocument doc) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); using (var reader = doc.Root.CreateReader()) { return (T)xmlSerializer.Deserialize(reader); } } public static XDocument Serialize<T>(T value) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); XDocument doc = new XDocument(); using (var writer = doc.CreateWriter()) { xmlSerializer.Serialize(writer, value); } return doc; } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With