Serialization Binder C# with Example



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); 
} 
} 
} 

0 Comment's

Comment Form

Submit Comment