Jeff,

Yeah, I had tried that once and got a 'cannot convert from
'System.IO.StringWriter' to 'System.IO.Stream'  complaint from the
compiler. (The formatter's looking for a Stream in the first argument.)

 StringWriter derices from TextWriter; how do we get Stream involved?  I
originally started down that way.

thanks

Steve Holak
Senior Software Architect

Brokerage Concepts IS Dept.
610-491-4879

email:  [EMAIL PROTECTED]



                    Jeff Key
                    <[EMAIL PROTECTED]        To:     [EMAIL PROTECTED]
                    OM>                       cc:
                    Sent by: dotnet           Subject:     Re: [DOTNET] Object 
serialization to string representation
                    discussion
                    <[EMAIL PROTECTED]
                    VELOP.COM>


                    05/21/2002 11:11
                    AM
                    Please respond to
                    dotnet discussion






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.

Reply via email to