ianXian
ianXian

Reputation: 195

.net binary formatter deserialize an object whose definition has changed a lot

I am trying to deserialize a file which is serialized using an older version.

In the new version, We have done the following things

  1. change namespace
  2. Change class member access level, from private to public
  3. Add a new inter parent class. Class A was derived from Base. Now, Class A is derived from B, and B is derived from Base. In B, there is no new member introduced.
  4. Base class adds a new member.

I know using SerializationBinder can solve issue 1. For the new added class member, I have marked with [NonSerialized]. But I still get deserialization error.

Any pointers?

Upvotes: 3

Views: 559

Answers (1)

Marc Gravell
Marc Gravell

Reputation: 1062955

I hate to say it, but my first pointer here would be "don't do that" - BinaryFormatter is very brittle - and while you can often bang your head on the keyboard for 6 hours to get past each successive pain point, it really isn't worth it. There are many many reasons I always say "don't use BinaryFormatter" - you've sadly found 4 of them. Frankly, my recommendation would be:

  • put back the original class, and use it just as a DTO to deserialize the old data
  • start moving to a model where you have a separate DTO model and entity model - and map between them so that your serialization is entirely independent of your application logic
  • investigate different serializers; just about any alternative serializer would be preferable to BinaryFormatter (except perhaps NetDataContractSerializer, which goes and repeats all the same mistakes; DataContractSerializer is ok-ish, though)

Sorry that isn't more positive...

Upvotes: 2

Related Questions