Re: BinaryFormatter.Deserialize

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance

From: Nicholas Paldino [.NET/C# MVP] (mvp_at_spam.guard.caspershouse.com)
Date: 10/12/04


Date: Tue, 12 Oct 2004 09:03:53 -0400

Igor,

    What is the problem when you have JUST the serializable attribute, and
remove the serialization constructor and the implementation of
ISerializable?

-- 
               - Nicholas Paldino [.NET/C# MVP]
               - mvp@spam.guard.caspershouse.com
"Igor" <noone@hotmail.com> wrote in message 
news:uofJ8qFsEHA.4032@TK2MSFTNGP12.phx.gbl...
> Earlier I tried only with [Serializable()] attribute, it didnt worked
> either. :(
>
>
> "Nicholas Paldino [.NET/C# MVP]" <mvp@spam.guard.caspershouse.com> wrote 
> in
> message news:OcYikkFsEHA.3896@TK2MSFTNGP15.phx.gbl...
>> Igor,
>>
>>     While I haven't taken the time to run the code, I can see that there
> is
>> nothing in your class that requires custom serialization.  All you have 
>> to
>> do is add the Serializable attribute, and your serialization should work
>> fine.  ISerializable only needs to be implemented when there are other
>> things (besides the fields in your class) that you want to serialize, or
>> they require certain logic to be executed.
>>
>>     Hope this helps.
>>
>>
>> -- 
>>                - Nicholas Paldino [.NET/C# MVP]
>>                - mvp@spam.guard.caspershouse.com
>>
>> "Igor" <noone@hotmail.com> wrote in message
>> news:OJRpa8EsEHA.3964@TK2MSFTNGP10.phx.gbl...
>> > [Serializable()]
>> >
>> > public class ApplicationInfo:IDisposable,ISerializable
>> >
>> > {
>> >
>> > private Guid session; // 16 bytes
>> >
>> > private Guid sessionNW; // 16 bytes
>> >
>> > private string ANI;
>> >
>> > private string DNIS;
>> >
>> > private string mqNW; // networking queue
>> >
>> > private string parent;
>> >
>> > private string child;
>> >
>> > private string applicationQueue;
>> >
>> > private int machineID;
>> >
>> > private int boardID;
>> >
>> > private int channelID;
>> >
>> > private string applicationName = "";
>> >
>> > public ApplicationInfo()
>> >
>> > {
>> >
>> > }
>> >
>> > public ApplicationInfo(SerializationInfo info, StreamingContext ctxt)
>> >
>> > {
>> >
>> > session = (Guid)info.GetValue("session", typeof(Guid));
>> >
>> > sessionNW = (Guid)info.GetValue("sessionNW", typeof(Guid));
>> >
>> > ANI = (string)info.GetValue("ANI", typeof(string));
>> >
>> > DNIS = (string)info.GetValue("DNIS", typeof(string));
>> >
>> > mqNW = (string)info.GetValue("mqNW", typeof(string));
>> >
>> > parent = (string)info.GetValue("parent", typeof(string));
>> >
>> > child = (string)info.GetValue("child", typeof(string));
>> >
>> > applicationQueue = (string)info.GetValue("applicationQueue",
>> > typeof(string));
>> >
>> > applicationName = (string)info.GetValue("applicationName",
>> > typeof(string));
>> >
>> > machineID = (int)info.GetValue("machineID", typeof(int));
>> >
>> > boardID = (int)info.GetValue("boardID", typeof(int));
>> >
>> > channelID = (int)info.GetValue("channelID", typeof(int));
>> >
>> > }
>> >
>> > public ApplicationInfo(string session, string sessionNW, string ANI,
>> > string
>> > DNIS, string mqNW, string parent, string child, string 
>> > applicationQueue,
>> > int
>> > machine, int board, int channel, string applicationName)
>> >
>> > {
>> >
>> > this.session = new Guid(session);
>> >
>> > this.sessionNW = new Guid(sessionNW);
>> >
>> > this.ANI = ANI;
>> >
>> > this.DNIS = DNIS;
>> >
>> > this.mqNW = mqNW;
>> >
>> > this.parent = parent;
>> >
>> > this.child = child;
>> >
>> > this.applicationQueue = applicationQueue;
>> >
>> > this.machineID = machine;
>> >
>> > this.boardID = board;
>> >
>> > this.channelID = channel;
>> >
>> > this.applicationName = applicationName;
>> >
>> > }
>> >
>> > #region IDisposable Members
>> >
>> > public void Dispose()
>> >
>> > {
>> >
>> > // TODO: Add ApplicationInfo.Dispose implementation
>> >
>> > }
>> >
>> > #endregion
>> >
>> > #region ISerializable Members
>> >
>> > public void GetObjectData(SerializationInfo info, StreamingContext
>> > context)
>> >
>> > {
>> >
>> > info.AddValue("session", session);
>> >
>> > info.AddValue("sessionNW", sessionNW);
>> >
>> > info.AddValue("ANI", ANI);
>> >
>> > info.AddValue("DNIS", DNIS);
>> >
>> > info.AddValue("mqNW", mqNW);
>> >
>> > info.AddValue("parent", parent);
>> >
>> > info.AddValue("child", child);
>> >
>> > info.AddValue("applicationQueue", applicationQueue);
>> >
>> > info.AddValue("machineID", machineID);
>> >
>> > info.AddValue("boardID", boardID);
>> >
>> > info.AddValue("channelID", channelID);
>> >
>> > info.AddValue("applicationName", applicationName);
>> >
>> > }
>> >
>> > #endregion
>> >
>> > }
>> >
>> > .........
>> >
>> > ApplicationInfo app;
>> >
>> > MemoryStream stream = new MemoryStream();
>> >
>> > BinaryFormatter formatter = new BinaryFormatter();
>> >
>> > formatter.Serialize(stream, app);
>> >
>> >
>> >
>> > MessageQueue mq = new MessageQueue(mqPath);
>> >
>> > Message m = new Message(stream, new BinaryMessageFormatter());
>> >
>> > mq.Formatter = new BinaryMessageFormatter();
>> >
>> > mq.Send(m);
>> >
>> >
>> >
>> > ........
>> >
>> >
>> >
>> > public void OnReceiveCompleted(Object source, ReceiveCompletedEventArgs
>> > asyncResult)
>> >
>> > {
>> >
>> > try
>> >
>> > {
>> >
>> > MessageQueue mq = (MessageQueue)source;
>> >
>> > Message m = mq.EndReceive(asyncResult.AsyncResult);
>> >
>> >
>> >
>> > m.Formatter = new BinaryMessageFormatter();
>> >
>> > incomingMessage(source, new
> IncomingMessageEventArgs((object)m.BodyStream,
>> > false));
>> >
>> > mq.BeginReceive();
>> >
>> > }
>> >
>> > catch(Exception ex)
>> >
>> > {
>> >
>> > Console.WriteLine(ex.ToString());
>> >
>> > }
>> >
>> > }
>> >
>> >
>> >
>> > .....
>> >
>> >
>> >
>> > public void OnIncomingMessage(object source, IncomingMessageEventArgs 
>> > e)
>> >
>> > {
>> >
>> > BinaryFormatter formatter = new BinaryFormatter();
>> >
>> > application = null;
>> >
>> > application =
>> > (ApplicationInfo)formatter.Deserialize((Stream)e.getDocument);
>> >
>> > }
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > "Jon Skeet [C# MVP]" <skeet@pobox.com> wrote in message
>> > news:MPG.1bd5c5ac27ec3fb598b67a@msnews.microsoft.com...
>> >> Igor <noone@hotmail.com> wrote:
>> >> > While executing BinaryFormatter.Deserialize() I get:
>> >> > System.InvalidCastException: Specified cast is not valid.
>> >> > I implemented ISerializable interface. What may be a problem?
>> >>
>> >> Could you post a short but complete program which demonstrates the
>> >> problem?
>> >>
>> >> See http://www.pobox.com/~skeet/csharp/complete.html for details of
>> >> what I mean by that.
>> >>
>> >> -- 
>> >> Jon Skeet - <skeet@pobox.com>
>> >> http://www.pobox.com/~skeet
>> >> If replying to the group, please do not mail me too
>> >
>> >
>>
>>
>
> 


Relevant Pages

  • Re: EJB3 Newbie & Persistence
    ... private String name; ... CustomerCMP customer; ... public void setAddress{ ...
    (comp.lang.java.beans)
  • Re: Serialization Slow?
    ... private void readObjectthrows IOException, ... Since you're doing defaultReadObject, all the normal serialization stuff is happening, at normal serialization speed. ... public void writeExternal{ ... String word = entry.getKey; ...
    (comp.lang.java.programmer)
  • Trying to understand interfaces
    ... have a class that implements an interface and I need to add functionality to ... private string m_message; ... private string m_sharpenedMessage; ... public void OnSharpened() ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Trying to understand interfaces
    ... if I have a class that implements an interface and I need to add ... private string m_message; ... private string m_sharpenedMessage; ... public void OnSharpened() ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Help compiling castor ibm java example
    ... private String artist = null; ... public void setArtist{ ...
    (comp.lang.java.programmer)