Serialization Binder C# with Example
The binder gives you an opportunity to inspect what types are being loaded in your application domain Create a class inherited from SerializationBinder class MyBinder : SerializationBinder { public override Type BindToType(string assemblyName, string typeName) { if (typeName.Equals("BinarySerializationExample.Item")) return typeof(Item); return null; } } Now we can check what types are loading and on this basis to decide what we really want to receive For using a binder, you must add it to the BinaryFormatter. object DeserializeData(byte[] bytes) { var binaryFormatter = new BinaryFormatter(); binaryFormatter.Binder = new MyBinder(); using (var memoryStream = new MemoryStream(bytes)) return binaryFormatter.Deserialize(memoryStream); } The complete solution using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; namespace BinarySerializationExample { class MyBinder : SerializationBinder { public override Type BindToType(string assemblyName, string typeName) { if (typeName.Equals("BinarySerializationExample.Item")) return typeof(Item); return null; } } [Serializable] public class Item { private string _name; public string Name { get { return _name; } set { _name = value; } } } class Program { static void Main(string[] args) { var item = new Item { Name = "Orange" }; var bytes = SerializeData(item); var deserializedData = (Item)DeserializeData(bytes); } private static byte[] SerializeData(object obj) { var binaryFormatter = new BinaryFormatter(); using (var memoryStream = new MemoryStream()) { binaryFormatter.Serialize(memoryStream, obj); return memoryStream.ToArray(); } } private static object DeserializeData(byte[] bytes) { var binaryFormatter = new BinaryFormatter { Binder = new MyBinder() }; using (var memoryStream = new MemoryStream(bytes)) return binaryFormatter.Deserialize(memoryStream); } } }