{
return true;
}
+
+#if NET_4_0
+ public void BindToName (string assemblyName, string typeName)
+ {
+ if (assemblyName != null)
+ TypeAssemblyName = assemblyName;
+ if (typeName != null)
+ InstanceTypeName = typeName;
+ }
+#endif
public abstract bool RequiresTypes { get; }
}
StreamingContext _context;
FormatterAssemblyStyle _assemblyFormat;
FormatterTypeStyle _typeFormat;
+#if NET_4_0
+ SerializationBinder _binder;
+#endif
byte[] arrayBuffer;
int ArrayBufferLength = 4096;
SerializationObjectManager _manager;
}
}
- public ObjectWriter (ISurrogateSelector surrogateSelector, StreamingContext context, FormatterAssemblyStyle assemblyFormat, FormatterTypeStyle typeFormat)
+ public ObjectWriter (BinaryFormatter formatter)
{
- _surrogateSelector = surrogateSelector;
- _context = context;
- _assemblyFormat = assemblyFormat;
- _typeFormat = typeFormat;
- _manager = new SerializationObjectManager (context);
+ _surrogateSelector = formatter.SurrogateSelector;
+ _context = formatter.Context;
+ _assemblyFormat = formatter.AssemblyFormat;
+ _typeFormat = formatter.TypeFormat;
+ _manager = new SerializationObjectManager (formatter.Context);
+#if NET_4_0
+ _binder = formatter.Binder;
+#endif
}
public void WriteObjectGraph (BinaryWriter writer, object obj, Header[] headers)
private void GetObjectData (object obj, out TypeMetadata metadata, out object data)
{
Type instanceType = obj.GetType();
-
+#if NET_4_0
+ string binderAssemblyName = null;
+ string binderTypeName = null;
+ if (_binder != null)
+ _binder.BindToName (instanceType, out binderAssemblyName, out binderTypeName);
+#endif
// Check if the formatter has a surrogate selector, if it does,
// check if the surrogate selector handles objects of the given type.
SerializationInfo info = new SerializationInfo (instanceType, new FormatterConverter ());
surrogate.GetObjectData (obj, info, _context);
metadata = new SerializableTypeMetadata (instanceType, info);
+#if NET_4_0
+ if (_binder != null)
+ metadata.BindToName (binderAssemblyName, binderTypeName);
+#endif
+
data = info;
return;
}
SerializationInfo info = new SerializationInfo (instanceType, new FormatterConverter ());
ser.GetObjectData (info, _context);
metadata = new SerializableTypeMetadata (instanceType, info);
+#if NET_4_0
+ if (_binder != null)
+ metadata.BindToName (binderAssemblyName, binderTypeName);
+#endif
+
data = info;
}
else
// Don't cache metadata info when the Context property is not null sice
// we can't control the number of possible contexts in this case
metadata = new MemberTypeMetadata (instanceType, _context);
+#if NET_4_0
+ if (_binder != null)
+ metadata.BindToName (binderAssemblyName, binderTypeName);
+#endif
+
return;
}
if (metadata == null) {
metadata = CreateMemberTypeMetadata (instanceType);
+#if NET_4_0
+ if (_binder != null)
+ metadata.BindToName (binderAssemblyName, binderTypeName);
+#endif
}
typesTable [instanceType] = metadata;