Serialization

J

Janne

I have a problem with Xml and Serialization.

I use serialization to get Xml as a result. All
Serialization examples in Microsoft documentation writes
the result to a file.

I don't want a file, I want an XML-object (XmlNode)
instead that I can pass as a parameter to another method.

How can I do that?

Example code:

XmlSerializer mySerializer = new XmlSerializer(typeof
(myClass));
TextWriter myWriter = new StreamWriter(@"C:\myfile.xml");

mySerializer.Serialize(myXmlWriter, myNode);
myWriter.Close();
 
N

Nicholas Paldino [.NET/C# MVP]

Janne,

Instead of using the constructor for a StreamWriter that takes a file
name, use a MemoryStream, and pass that, like this:

// The memory stream that will hold the xml.
MemoryStream pobjStream = new MemoryStream();

// Create the StreamWriter around the memory stream.
TextWriter myWriter = new StreamWriter(pobjStream);

// Now save to the memory stream.
mySerializer.Serialize(myXmlWriter, myNode);

Now, if you want to get that into an Xml document, you can call the Load
method, passing a stream to it.

// Create the xml document.
XmlDocument pobjXmlDoc = new XmlDocument();

// Load the content.
pobjXmlDoc.Load(pobjStream);

XmlDocument derives from XmlNode so you can just pass that around to
anything that accepts an XmlNode instance.

Hope this helps.
 
J

Janne

Nicholas!

Thank you for your help but it still won't work.

Is there a way to check the Stream-object or the Writer-
object? The load-command gives me an empty XmlDocument.

Take a look at the code and check please.
MemoryStream pobjStream = new MemoryStream();

TextWriter myWriter = new StreamWriter(pobjStream);

mySerializer.Serialize(myWriter, myNode);
XmlDocument pobjXmlDoc = new XmlDocument();

pobjXmlDoc.Load(pobjStream);



-----Original Message-----
Janne,

Instead of using the constructor for a StreamWriter that takes a file
name, use a MemoryStream, and pass that, like this:

// The memory stream that will hold the xml.
MemoryStream pobjStream = new MemoryStream();

// Create the StreamWriter around the memory stream.
TextWriter myWriter = new StreamWriter(pobjStream);

// Now save to the memory stream.
mySerializer.Serialize(myXmlWriter, myNode);

Now, if you want to get that into an Xml document, you can call the Load
method, passing a stream to it.

// Create the xml document.
XmlDocument pobjXmlDoc = new XmlDocument();

// Load the content.
pobjXmlDoc.Load(pobjStream);

XmlDocument derives from XmlNode so you can just pass that around to
anything that accepts an XmlNode instance.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

I have a problem with Xml and Serialization.

I use serialization to get Xml as a result. All
Serialization examples in Microsoft documentation writes
the result to a file.

I don't want a file, I want an XML-object (XmlNode)
instead that I can pass as a parameter to another method.

How can I do that?

Example code:

XmlSerializer mySerializer = new XmlSerializer(typeof
(myClass));
TextWriter myWriter = new StreamWriter (@"C:\myfile.xml");

mySerializer.Serialize(myXmlWriter, myNode);
myWriter.Close();


.
 
N

Nicholas Paldino [.NET/C# MVP]

Janne,

The MemoryStream class has a ToArray method you can use to return the
byte array that represents the bytes in the stream.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

Janne said:
Nicholas!

Thank you for your help but it still won't work.

Is there a way to check the Stream-object or the Writer-
object? The load-command gives me an empty XmlDocument.

Take a look at the code and check please.
MemoryStream pobjStream = new MemoryStream();

TextWriter myWriter = new StreamWriter(pobjStream);

mySerializer.Serialize(myWriter, myNode);
XmlDocument pobjXmlDoc = new XmlDocument();

pobjXmlDoc.Load(pobjStream);



-----Original Message-----
Janne,

Instead of using the constructor for a StreamWriter that takes a file
name, use a MemoryStream, and pass that, like this:

// The memory stream that will hold the xml.
MemoryStream pobjStream = new MemoryStream();

// Create the StreamWriter around the memory stream.
TextWriter myWriter = new StreamWriter(pobjStream);

// Now save to the memory stream.
mySerializer.Serialize(myXmlWriter, myNode);

Now, if you want to get that into an Xml document, you can call the Load
method, passing a stream to it.

// Create the xml document.
XmlDocument pobjXmlDoc = new XmlDocument();

// Load the content.
pobjXmlDoc.Load(pobjStream);

XmlDocument derives from XmlNode so you can just pass that around to
anything that accepts an XmlNode instance.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

I have a problem with Xml and Serialization.

I use serialization to get Xml as a result. All
Serialization examples in Microsoft documentation writes
the result to a file.

I don't want a file, I want an XML-object (XmlNode)
instead that I can pass as a parameter to another method.

How can I do that?

Example code:

XmlSerializer mySerializer = new XmlSerializer(typeof
(myClass));
TextWriter myWriter = new StreamWriter (@"C:\myfile.xml");

mySerializer.Serialize(myXmlWriter, myNode);
myWriter.Close();


.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top