C# Deserialization and constructor initialization
This is an example how to recreate non serialized member of the class on deserialization.
class TestSerialization{[Test]public void Test(){var parent = new Parent(2,3);// serializebyte[] data = SerializationHelper.Serialize(parent);// deserializevar parentCopy = SerializationHelper.Deserialize(data) as Parent;Assert.AreEqual(2, parentCopy.Value1);//confirm that constructor is not called on deserializationAssert.AreEqual(6, parentCopy.Value2);}[Serializable]class Parent{public Parent(int value1, int value2){_value1 = value1;_value2 = value2 * 2;//Child object is not serialized, so needs to be recreated on deserialization (see below)_child = new Child() { Value1 = _value1, Value2 = _value2 };}private int _value1;private int _value2;[NonSerialized]private Child _child;public int Value1 { get { return _child.Value1; } }public int Value2 { get { return _child.Value2; } }[OnDeserialized]private void Init(StreamingContext context){//this is the place where we recreate child object_child = new Child() { Value1 = _value1, Value2 = _value2 };}}//this object is not Serializableclass Child{public int Value1 { get; set; }public int Value2 { get; set; }}public class SerializationHelper{private static readonly BinaryFormatter Fmt = new BinaryFormatter();public static byte[] Serialize(object obj){if (obj == null)throw new ArgumentNullException("obj");// serialize to memoryvar s = new MemoryStream();Fmt.Serialize(s, obj);s.Flush();return s.ToArray();}public static object Deserialize(byte[] data){var os = new MemoryStream(data);return Fmt.Deserialize(os);}}}
Your posts always helps me out to know everything on C#, on every post of yours I gets a opportunity to learn something new from it.
ReplyDeleteThanks. the posts are the solutions to various problems I come across and these is where the diversity is coming from. I'm glad you find them useful. All the best.
ReplyDeleteWow such a brilliant idea of the language. Thanks
ReplyDeleteEcommerce Website Development
Thanks for the great article here. I was searching for something like that for quite a long time and at last I have found it here. I hope to see more such nice articles in the nearest future too…
ReplyDeleteThanks for sharing this amazing post. I am a Washington dc property appraiser at Aipraiser that is a professional real estate appraisal online portal that provides nationwide property and appraisal services.
ReplyDelete