Page 157 - CSharp/C#
P. 157

Then you need to let your IFormatter know about the surrogates by defining and initializing a
        SurrogateSelector and assigning it to your IFormatter


         var surrogateSelector = new SurrogateSelector();
         surrogateSelector.AddSurrogate(typeof(Item), new StreamingContext(StreamingContextStates.All),
         new ItemSurrogate());
         var binaryFormatter = new BinaryFormatter
         {
             SurrogateSelector = surrogateSelector
         };


        Even if the class is not marked serializable.


         //this class is not serializable
         public class Item
         {
             private string _name;

             public string Name
             {
                 get { return _name; }
                 set { _name = value; }
             }
         }


        The complete solution


         using System;
         using System.IO;
         using System.Runtime.Serialization;
         using System.Runtime.Serialization.Formatters.Binary;

         namespace BinarySerializationExample
         {
             class Item
             {
                 private string _name;

                 public string Name
                 {
                     get { return _name; }
                     set { _name = value; }
                 }
             }

             class ItemSurrogate : ISerializationSurrogate
             {
                 public void GetObjectData(object obj, SerializationInfo info, StreamingContext
         context)
                 {
                     var item = (Item)obj;
                     info.AddValue("_name", item.Name);
                 }

                 public object SetObjectData(object obj, SerializationInfo info, StreamingContext
         context, ISurrogateSelector selector)
                 {
                     var item = (Item)obj;



        https://riptutorial.com/                                                                             103
   152   153   154   155   156   157   158   159   160   161   162