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);
// serialize
byte[] data = SerializationHelper.Serialize(parent);
// deserialize
var parentCopy = SerializationHelper.Deserialize(data) as Parent;
Assert.AreEqual(2, parentCopy.Value1);//confirm that constructor is not called on deserialization
Assert.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 Serializable
class 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 memory
var 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