StringWriter does not inherit from Stream, you have to stick with the MemoryStream.
Christoph Schittko Software Architect Mshow - a division of InterCall ----- Original Message ----- From: "franklin gray" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Tuesday, May 21, 2002 11:19 AM Subject: Re: [DOTNET] Object serialization to string representation I got a Invalid case exception but thought it was because the object I was trying to serialize inherited from TreeNode. After reading your email, I commented that out and I still got it. -----Original Message----- From: Sean Greer (SBI-Chico) [mailto:[EMAIL PROTECTED]] Sent: Tuesday, May 21, 2002 11:16 AM To: [EMAIL PROTECTED] Subject: Re: [DOTNET] Object serialization to string representation When I attempt to use your SoapSerialize function I get the following errors: xmlserialize.cs(29,3): error CS1502: The best overloaded method match for 'System.Runtime.Serialization.Formatters.Soap.SoapFormatter.Serialize(Sy stem.IO.Stream, object)' has some invalid arguments xmlserialize.cs(29,23): error CS1503: Argument '1': cannot convert from 'System.IO.StringWriter' to 'System.IO.Stream' Looking at SoapFormatter.Serialize it does not appear that I can pass a StringWriter, only a class derived from Stream. Am I doing something wrong? Seang -----Original Message----- From: Jeff Key [mailto:[EMAIL PROTECTED]] Sent: Tuesday, May 21, 2002 8:11 AM To: [EMAIL PROTECTED] Subject: Re: [DOTNET] Object serialization to string representation Steve, You can save yourself a couple lines of code by using the StringWriter: public static string SoapSerialize(object o) { StringWriter sw = new StringWriter(); SoapFormatter formatter = new SoapFormatter(); formatter.Serialize(sw, o); string ret = sw.ToString(); sw.Close(); return ret; } -jk -----Original Message----- From: dotnet discussion [mailto:[EMAIL PROTECTED]] On Behalf Of Steve Holak Sent: Tuesday, May 21, 2002 9:55 AM To: [EMAIL PROTECTED] Subject: Re: [DOTNET] Object serialization to string representation Thanks to all who replied to this; I took it all to heart and played with various scenarios based on our needs (and the intent was, as Brent stated, simply to persist the object to a database for a while and re-hydrate it later), and decided to use the SoapFormatter. I wrote a little wrapper class to handle the serialization for the application; I've included the simplified code below for anyone interested. Thanks again to everyone. public class Serialization { public static string SoapSerialize(object o) { string results; //Serialize the object Stream stream=new MemoryStream(); SoapFormatter formatter=new SoapFormatter(); formatter.Serialize(stream,o); //return the string StreamReader sr =new StreamReader(stream); sr.BaseStream.Seek(0, SeekOrigin.Begin); results=sr.ReadToEnd(); sr.Close(); return results; } public static object SoapDeserialize(string soap) { object o; Stream stream=new MemoryStream(Encoding.UTF8.GetBytes(soap)); SoapFormatter formatter=new SoapFormatter(); o=formatter.Deserialize(stream); stream.Close(); return o; } } To use : private void SerializeMyself() { string serialized=Serialization.SoapSerialize(this); // call the UploadToDatabaseFunction(serialized); } private MyObjectType Deserialize()//summarized. You could make this more flexible and generic by eliminating the //cast or passing in the type, etc,. { //string serialized=GetObjectFromDatabaseFunction(some identifier); return (MyObjectType) Serialization.SoapDeserialize(serialized); } Steve Holak Senior Software Architect Brokerage Concepts IS Dept. 610-491-4879 email: [EMAIL PROTECTED] "Brent E. Rector" <[EMAIL PROTECTED] To: [EMAIL PROTECTED] > cc: Sent by: dotnet Subject: Re: [DOTNET] Object serialization to string representation discussion <[EMAIL PROTECTED] VELOP.COM> 05/20/2002 05:49 PM Please respond to dotnet discussion IMO, the SoapFormatter is a better choice because it can represent all serializable .NET types while the XML serializer is quite restricted as to the types it supports. Especially if I correctly understood he intends to save the string dta to a database and, I assume, rehydrate it later on a .NET system. -- Brent Rector, .NET Wise Owl Demeanor for .NET - an obfuscation utility http://www.wiseowl.com/Products/Products.aspx -----Original Message----- From: franklin gray [mailto:[EMAIL PROTECTED]] Sent: Monday, May 20, 2002 2:45 PM To: [EMAIL PROTECTED] Subject: Re: [DOTNET] Object serialization to string representation or doing something like this.... Public Function GetXML() as string Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(YOUROBJECTTYPEHERE)) Dim writer As New System.IO.StringWriter() Dim Obj As YOUROBJECTTYPEHERE Obj = Me serializer.Serialize(writer, Obj) Dim s As String s = writer.ToString writer.Close() Return s End Function -----Original Message----- From: Brent E. Rector [mailto:[EMAIL PROTECTED]] Sent: Monday, May 20, 2002 4:35 PM To: [EMAIL PROTECTED] Subject: Re: [DOTNET] Object serialization to string representation Well, you are using the "Binary" formatter to write the state of your object to the stream. But you subsequently try and read the binary data as a string. You'd have better luck using the SoapFormatter. -- Brent Rector, .NET Wise Owl Demeanor for .NET - an obfuscation utility http://www.wiseowl.com/Products/Products.aspx -----Original Message----- From: Steve Holak [mailto:[EMAIL PROTECTED]] Sent: Monday, May 20, 2002 2:13 PM To: [EMAIL PROTECTED] Subject: [DOTNET] Object serialization to string representation I'm trying a test function to serialize an object to a string (to eventually upload the string to a database for storage). The object serializes just fine to disk creating a Stream as a File.IO. What I'm encountering is trying to serialize to a MemoryStream and reading it back with a StreamReader; in the code below the string "test" is always empty ("") The "this" reference is the object itself which contains the serialization implemetation. What am I missing, and is there a simpler way to return the string representation of a serialized object without writing to disk? Stream stream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream,this);//this is the object saving itself to the db. StreamReader sr =new StreamReader(stream); sr.BaseStream.Seek(0, SeekOrigin.Begin); //test always shows "" string test=sr.ReadToEnd(); stream.Close(); TIA Steve Holak Senior Software Architect Brokerage Concepts IS Dept. 610-491-4879 email: [EMAIL PROTECTED] You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com.