diff --git a/NetSerializer/Settings.cs b/NetSerializer/Settings.cs index 94880da..54b5471 100644 --- a/NetSerializer/Settings.cs +++ b/NetSerializer/Settings.cs @@ -13,6 +13,16 @@ namespace NetSerializer { public class Settings { + /// + /// Gets called when an object is going to be deserialized. + /// + public Action BeforeDeserializingObjectWithTypeId; + + /// + /// Gets called when an object is going to be serialized. + /// + public Action BeforeSerializingObjectOfType; + /// /// Array of custom TypeSerializers /// diff --git a/NetSerializer/TypeSerializers/ObjectSerializer.cs b/NetSerializer/TypeSerializers/ObjectSerializer.cs index 9b8bbd9..0cab29b 100644 --- a/NetSerializer/TypeSerializers/ObjectSerializer.cs +++ b/NetSerializer/TypeSerializers/ObjectSerializer.cs @@ -46,6 +46,8 @@ public static void Serialize(Serializer serializer, Stream stream, object ob) var type = ob.GetType(); + serializer.Settings.BeforeSerializingObjectOfType?.Invoke(type); + SerializeDelegate del; uint id = serializer.GetTypeIdAndSerializer(type, out del); @@ -75,6 +77,8 @@ public static void Deserialize(Serializer serializer, Stream stream, out object ob = new object(); return; } + + serializer.Settings.BeforeDeserializingObjectWithTypeId?.Invoke(id); var del = serializer.GetDeserializeTrampolineFromId(id); del(serializer, stream, out ob); diff --git a/Test/Program.cs b/Test/Program.cs index 0b5b0e7..87107e3 100644 --- a/Test/Program.cs +++ b/Test/Program.cs @@ -41,6 +41,22 @@ static void Main(string[] args) foreach (var thread in threads) thread.Join(); + + Console.WriteLine(); + Console.WriteLine("Serialized objects of types:"); + foreach (var type in Tester.SerializedTypes.OrderBy(x => x.FullName)) + { + Console.WriteLine(type.FullName); + } + + Console.WriteLine(); + Console.WriteLine("Deserialized objects with type ids:"); + foreach (var id in Tester.DeserializedTypeIds.OrderBy(x => x)) + { + Console.WriteLine(id); + } + + Console.ReadKey(); } static bool ParseArgs(string[] args) diff --git a/Test/Tester.cs b/Test/Tester.cs index 3775121..557b73c 100644 --- a/Test/Tester.cs +++ b/Test/Tester.cs @@ -9,6 +9,14 @@ namespace Test { class Tester { + private static HashSet m_serializedTypes = new HashSet(); + + private static HashSet m_deserializedTypeIds = new HashSet(); + + public static IEnumerable SerializedTypes => m_serializedTypes; + + public static IEnumerable DeserializedTypeIds => m_deserializedTypeIds; + public static NS.Serializer CreateSerializer() { var types = GetKnownTypes().ToArray(); @@ -18,6 +26,8 @@ public static NS.Serializer CreateSerializer() var settings = new NS.Settings() { CustomTypeSerializers = new NS.ITypeSerializer[] { new TriDimArrayCustomSerializer() }, + BeforeSerializingObjectOfType = type => m_serializedTypes.Add(type), + BeforeDeserializingObjectWithTypeId = id => m_deserializedTypeIds.Add(id) }; var serializer = new NS.Serializer(types, settings);