Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions NetSerializer/Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,16 @@ namespace NetSerializer
{
public class Settings
{
/// <summary>
/// Gets called when an object is going to be deserialized.
/// </summary>
public Action<uint> BeforeDeserializingObjectWithTypeId;

/// <summary>
/// Gets called when an object is going to be serialized.
/// </summary>
public Action<Type> BeforeSerializingObjectOfType;

/// <summary>
/// Array of custom TypeSerializers
/// </summary>
Expand Down
4 changes: 4 additions & 0 deletions NetSerializer/TypeSerializers/ObjectSerializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ public static void Serialize(Serializer serializer, Stream stream, object ob)

var type = ob.GetType();

serializer.Settings.BeforeSerializingObjectOfType?.Invoke(type);

SerializeDelegate<object> del;

uint id = serializer.GetTypeIdAndSerializer(type, out del);
Expand Down Expand Up @@ -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);
Expand Down
16 changes: 16 additions & 0 deletions Test/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
10 changes: 10 additions & 0 deletions Test/Tester.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@ namespace Test
{
class Tester
{
private static HashSet<Type> m_serializedTypes = new HashSet<Type>();

private static HashSet<uint> m_deserializedTypeIds = new HashSet<uint>();

public static IEnumerable<Type> SerializedTypes => m_serializedTypes;

public static IEnumerable<uint> DeserializedTypeIds => m_deserializedTypeIds;

public static NS.Serializer CreateSerializer()
{
var types = GetKnownTypes().ToArray();
Expand All @@ -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);
Expand Down