Page 159 - CSharp/C#
P. 159

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)



        https://riptutorial.com/                                                                             105
   154   155   156   157   158   159   160   161   162   163   164