TypeOnlyBinder

SilverShaded

Well-known member
Joined
Mar 7, 2020
Messages
93
Programming Experience
10+
Hi, i'm want to deserialize an object from a different assembly and came across this example below; however the example refers to " return defaultBinder.BindToType(assemblyName, typeName);" but when i run the code the defaultBinder is null, (new BinaryFormatter().Binder is null)

Is there another way doing this, im aware of typeforwarding but that is not what i want, i want to deserialise an object from a different assembly and where the namespace is different to the original.


C#:
  public class TypeOnlyBinder : SerializationBinder

  {

      private static SerializationBinder defaultBinder = new BinaryFormatter().Binder;


      public override Type BindToType(string assemblyName, string typeName)

      {

          if (assemblyName.Equals("NA"))

              return Type.GetType(typeName);

          else

              return defaultBinder.BindToType(assemblyName, typeName);

      }


      public override void BindToName(Type serializedType, out string assemblyName, out string typeName)

      {

          // but null out the assembly name

          assemblyName = "NA";

          typeName = serializedType.FullName;

      }


      private static object locker = new object();

      private static TypeOnlyBinder _default = null;


      public static TypeOnlyBinder Default

      {

          get

          {

              lock (locker)

              {

                  if (_default == null)

                      _default = new TypeOnlyBinder();

              }

              return _default;

          }

      }
 
Well ok, i gave up, ill just re-create the files from scratch, non of the methods seem to work unless you have a realitvely simple well thought out structure which I didn't. At least not without being an deserialisation expert.
 
Back
Top Bottom