MemoryStream fs = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); SurrogateSelector ss = new SurrogateSelector(); CanvasSurrogate CanvasSurrogate = new CanvasSurrogate(); ss.AddSurrogate(typeof(Canvas),new StreamingContext(StreamingContextStates.All),CanvasSurrogate); formatter.SurrogateSelector = ss; Canvas x = new Canvas(); x.Name = "Fred"; formatter.Serialize(fs, x); fs.Position = 0; Canvas y = (Canvas)formatter.Deserialize(fs);with this:
public class CanvasSurrogate : ISerializationSurrogate { public void GetObjectData(object obj, SerializationInfo info, StreamingContext context) { Canvas c = (Canvas)obj; info.AddValue("Name", c.Name); } public object SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector) { Canvas c = (Canvas)obj; c.Name = info.GetString("Name"); //Errors here on the assignment return obj; } }Update: