Good stuff Christoph. Thanks for taking the time to share it with us. The dotnet247 site ( M. Chen) makes a very good point though :
"since TreeNode contains some reference/pointer to other object (Next), it's not a good practise to serialize such a class object." First time I visited that site; seems well-organized. Steve Holak Senior Software Architect Brokerage Concepts IS Dept. 610-491-4879 email: [EMAIL PROTECTED] Christoph <ChristophDotNet@AUST To: [EMAIL PROTECTED] IN.RR.COM> cc: Sent by: dotnet Subject: Re: [DOTNET] Object serialization to string representation discussion <[EMAIL PROTECTED] OP.COM> 05/21/2002 11:21 PM Please respond to dotnet discussion Steve, There is no requirement for a default constructor with the SoapFormatter, only with the XmlSerializer. I messed around a little bit more trying to serialize a class derived from or containing a TreeNode and I get exceptions in both cases. Then I tried a BinaryFormatter instead a SoapFormatter and everything seemed to work, which makes me think that this might be a bug in the SoapFormatter. You can probably work around this with a SerializationSurrogate for the TreeNode. You have to develop a class to handle thede-/serializing TreeNodes through the ISerializationSurrogate interface. You register this class with a SurrogateSelector, then you pass that SurrogateSelector to the SoapFormatter constructor, like this: SurrogateSelector selector = new SurrogateSelector(); selector.AddSurrogate( typeof( TreeNode), new StreamingContext( StreamingContextStates.All ), new SerializableSurrogate() ); SoapFormatter formatter = new SoapFormatter( selector, new StreamingContext( StreamingContextStates.All ) ); The surrogate will be called whenever you are trying to serialize or deserialize a TreeNode instance. I also just stumbled over this thread [1] in Microsoft's csharp newsgroup, which is dealing with the same problem. HTH, Christoph Schittko Software Architect Mshow - a division of InterCall [1] http://dotnet247.com/247reference/msgs/6/31186.aspx ----- Original Message ----- From: "Steve Holak" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Tuesday, May 21, 2002 1:42 PM Subject: Re: [DOTNET] Object serialization to string representation > IIRC, there is a requirement for a default parameterless public contructor > on the serializable class, in order for the Soap Formatter to serialize it, > but I may be incorrect. I haven't looked at Treenode; and have you tried > > :base()? (or the VB analog?) > > > Steve Holak > Senior Software Architect > > Brokerage Concepts IS Dept. > 610-491-4879 > > email: [EMAIL PROTECTED] > > > > Christoph > <ChristophDotNet@AUST To: [EMAIL PROTECTED] > IN.RR.COM> cc: > Sent by: dotnet Subject: Re: [DOTNET] Object serialization to string representation > discussion > <[EMAIL PROTECTED] > OP.COM> > > > 05/21/2002 01:46 PM > Please respond to > dotnet discussion > > > > > > > This usually means that your class implements the ISerializable interface, > but does not implement the required constructor of the format. > > Here's from the Framework docs: > The ISerializable interface implies a constructor with the signature > Constructor(SerializationInfo info, StreamingContext context). At > deserialization time, the current constructor is called only after the data > in the SerializationInfo has been deserialized by the formatter. In general > this constructor should be protected if the class is not sealed > (NotInheritable in Visual Basic) . > > I couldn't tell that this is the case from your code samples ... > > HTH, > Christoph Schittko > Software Architect > Mshow - a division of InterCall > > ----- Original Message ----- > From: "franklin gray" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Tuesday, May 21, 2002 12:25 PM > Subject: Re: [DOTNET] Object serialization to string representation > > > Any idea what this means? > > An unhandled exception of type > 'System.Runtime.Serialization.SerializationException' occurred in > mscorlib.dll > > Additional information: The constructor to deserialize an object of type > SoapSerialization.Class2 was not found. > > > I tried it 3 ways with an error but the 4th works. > > <Serializable()> Public Class Class2 > Inherits TreeNode > Public Sub New() > MyBase.New("Blank") > End Sub > Public MyData As String > End Class > > <Serializable()> Public Class Class2 > Inherits TreeNode > Public Sub New() > End Sub > Public MyData As String > End Class > > <Serializable()> Public Class Class2 > Inherits TreeNode > Public MyData As String > End Class > > > This works though > <Serializable()> Public Class Class2 > Public MyData As String > End Class > > 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.