Thanks for everybody's help. I apologize, because the answer was there all along but I didn't look hard enough initially. I found that subclassing SerializationBinder and overriding the BindToType method and then setting the IFormatter.Binder property to an instance of my custom SerializationBinder class did just what I wanted.
On Sat, 6 Jul 2002 11:09:40 -0700, Robert Chartier <[EMAIL PROTECTED]> wrote: >Another option would be to send an upgrade package, that contains the new >and the old versions of your objects, loop on all serialized objects in >your database into the old, have some method to do the upgrade to the new, >and then save with the new. it would work pretty easily if the amount of >objects is fairly low. > > > > > >At 10:29 AM 07/06/2002 -0400, you wrote: >>Serialization has no way of inherently dealing with version issues. And >>interfaces don't come in to it - serialization looks at your object's >>internal state via reflection (or a similar mechanism - I don't know >>that it uses reflection per se). >> >>The best way to deal with this problem is to implement ISerializable and >>implement the two methods (ISerializable::GetObjectData and a private >>constructor) that are required for serialization. >> >>It's really pretty easy - they give you a property bag, and you write >>stuff to it as a series of name-value pairs. The tough part comes in >>when you try to rectify the delta between the old object that was saved, >>and the new one that you're trying to create. But since only you could >>possibly know how to do this, the runtime leaves it up to you. >> >> > -----Original Message----- >> > From: Moderated discussion of advanced .NET topics. [mailto:ADVANCED- >> > [EMAIL PROTECTED]] On Behalf Of Paul Currit >> > Sent: Friday, July 05, 2002 2:31 PM >> > To: [EMAIL PROTECTED] >> > Subject: [ADVANCED-DOTNET] Serialization and assembly version >>redirection >> > >> > I am persisting objects to a database using the BinaryFormatter. When >> > inserting new objects, I call BinaryFormatter.Serialize and store the >> > object as a byte array in a database table. When getting an object out >>of >> > the table I use BinaryFormatter.Deserialize to convert the byte array >>back >> > into the object. If the version of the assembly containing the >> > serializable type changes, can the serialized object in the database >>be >> > deserialized with the newer version. In other words, is there any way >>to >> > deserialize objects that were originally serialized under a different >> > version number, as long as the type's interface hasn't changed? Is >>this >> > even an appropriate use of the BinaryFormatter, since it is typically >>used >> > for ephemeral objects and not persistence? >> > >> > I've tried using the <assemblyBinding> config section, but in my >>tests, >> > deserialization is ignoring the assembly version redirection. >> > >> > You can read messages from the Advanced DOTNET archive, unsubscribe >>from >> > Advanced DOTNET, or >> > subscribe to other DevelopMentor lists at http://discuss.develop.com. >> >>You can read messages from the Advanced DOTNET archive, unsubscribe from >>Advanced DOTNET, or >>subscribe to other DevelopMentor lists at http://discuss.develop.com. > > >Robert Chartier >Author and Developer >604-975-5590 >[EMAIL PROTECTED] >http://www.aspalliance.com/nothingmn/ > >You can read messages from the Advanced DOTNET archive, unsubscribe from Advanced DOTNET, or >subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the Advanced DOTNET archive, unsubscribe from Advanced DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com.
