Skip to content

Commit 6bafc4c

Browse files
committed
bugfix not using know serializers when defined
1 parent e5d4900 commit 6bafc4c

15 files changed

+106
-15
lines changed

src/Hyperion/SerializerFactories/ArraySerializerFactory.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,14 @@ public override ValueSerializer BuildSerializer(Serializer serializer, Type type
7171
WriteValues((dynamic)arr, stream, elementType, elementSerializer, session);
7272
};
7373
arraySerializer.Initialize(reader, writer);
74-
typeMapping.TryAdd(type, arraySerializer);
74+
75+
if (serializer.Options.KnownTypesDict.TryGetValue(type, out var index))
76+
{
77+
var wrapper = new KnownTypeObjectSerializer(arraySerializer, index);
78+
typeMapping.TryAdd(type, wrapper);
79+
}
80+
else
81+
typeMapping.TryAdd(type, arraySerializer);
7582
return arraySerializer;
7683
}
7784
}

src/Hyperion/SerializerFactories/ConstructorInfoSerializerFactory.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,13 @@ public override ValueSerializer BuildSerializer(Serializer serializer, Type type
3232
ConcurrentDictionary<Type, ValueSerializer> typeMapping)
3333
{
3434
var os = new ObjectSerializer(type);
35-
typeMapping.TryAdd(type, os);
35+
if (serializer.Options.KnownTypesDict.TryGetValue(type, out var index))
36+
{
37+
var wrapper = new KnownTypeObjectSerializer(os, index);
38+
typeMapping.TryAdd(type, wrapper);
39+
}
40+
else
41+
typeMapping.TryAdd(type, os);
3642
ObjectReader reader = (stream, session) =>
3743
{
3844
var owner = stream.ReadObject(session) as Type;

src/Hyperion/SerializerFactories/DefaultDictionarySerializerFactory.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,13 @@ public override ValueSerializer BuildSerializer(Serializer serializer, Type type
3131
ConcurrentDictionary<Type, ValueSerializer> typeMapping)
3232
{
3333
var ser = new ObjectSerializer(type);
34-
typeMapping.TryAdd(type, ser);
34+
if (serializer.Options.KnownTypesDict.TryGetValue(type, out var index))
35+
{
36+
var wrapper = new KnownTypeObjectSerializer(ser, index);
37+
typeMapping.TryAdd(type, wrapper);
38+
}
39+
else
40+
typeMapping.TryAdd(type, ser);
3541
var elementSerializer = serializer.GetSerializerByType(typeof (DictionaryEntry));
3642
var preserveObjectReferences = serializer.Options.PreserveObjectReferences;
3743
ObjectReader reader = (stream, session) =>

src/Hyperion/SerializerFactories/DelegateSerializerFactory.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,13 @@ public override ValueSerializer BuildSerializer(Serializer serializer, Type type
3131
ConcurrentDictionary<Type, ValueSerializer> typeMapping)
3232
{
3333
var os = new ObjectSerializer(type);
34-
typeMapping.TryAdd(type, os);
34+
if (serializer.Options.KnownTypesDict.TryGetValue(type, out var index))
35+
{
36+
var wrapper = new KnownTypeObjectSerializer(os, index);
37+
typeMapping.TryAdd(type, wrapper);
38+
}
39+
else
40+
typeMapping.TryAdd(type, os);
3541
var methodInfoSerializer = serializer.GetSerializerByType(typeof(MethodInfo));
3642
var preserveObjectReferences = serializer.Options.PreserveObjectReferences;
3743
ObjectReader reader = (stream, session) =>

src/Hyperion/SerializerFactories/DictionarySerializerFactory.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,13 @@ public override ValueSerializer BuildSerializer(Serializer serializer, Type type
3939
{
4040
var preserveObjectReferences = serializer.Options.PreserveObjectReferences;
4141
var ser = new ObjectSerializer(type);
42-
typeMapping.TryAdd(type, ser);
42+
if (serializer.Options.KnownTypesDict.TryGetValue(type, out var index))
43+
{
44+
var wrapper = new KnownTypeObjectSerializer(ser, index);
45+
typeMapping.TryAdd(type, wrapper);
46+
}
47+
else
48+
typeMapping.TryAdd(type, ser);
4349
var dictionaryTypes = GetKeyValuePairType(type);
4450
var elementSerializer = serializer.GetSerializerByType(dictionaryTypes.KeyValuePairType);
4551

src/Hyperion/SerializerFactories/EnumerableSerializerFactory.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,13 @@ public override ValueSerializer BuildSerializer(Serializer serializer, Type type
136136
ConcurrentDictionary<Type, ValueSerializer> typeMapping)
137137
{
138138
var x = new ObjectSerializer(type);
139-
typeMapping.TryAdd(type, x);
139+
if (serializer.Options.KnownTypesDict.TryGetValue(type, out var index))
140+
{
141+
var wrapper = new KnownTypeObjectSerializer(x, index);
142+
typeMapping.TryAdd(type, wrapper);
143+
}
144+
else
145+
typeMapping.TryAdd(type, x);
140146

141147
var preserveObjectReferences = serializer.Options.PreserveObjectReferences;
142148

src/Hyperion/SerializerFactories/ExceptionSerializerFactory.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,13 @@ public override ValueSerializer BuildSerializer(Serializer serializer, Type type
9191
StringSerializer.WriteValueImpl(stream, stackTraceString, session);
9292
stream.WriteObjectWithManifest(innerException, session);
9393
});
94-
typeMapping.TryAdd(type, exceptionSerializer);
94+
if (serializer.Options.KnownTypesDict.TryGetValue(type, out var index))
95+
{
96+
var wrapper = new KnownTypeObjectSerializer(exceptionSerializer, index);
97+
typeMapping.TryAdd(type, wrapper);
98+
}
99+
else
100+
typeMapping.TryAdd(type, exceptionSerializer);
95101
return exceptionSerializer;
96102
}
97103
}

src/Hyperion/SerializerFactories/ExpandoObjectSerializerFactory.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,13 @@ public override ValueSerializer BuildSerializer(Serializer serializer, Type type
2929
{
3030
var preserveObjectReferences = serializer.Options.PreserveObjectReferences;
3131
var ser = new ObjectSerializer(type);
32-
typeMapping.TryAdd(type, ser);
32+
if (serializer.Options.KnownTypesDict.TryGetValue(type, out var index))
33+
{
34+
var wrapper = new KnownTypeObjectSerializer(ser, index);
35+
typeMapping.TryAdd(type, wrapper);
36+
}
37+
else
38+
typeMapping.TryAdd(type, ser);
3339
var elementSerializer = serializer.GetSerializerByType(typeof(DictionaryEntry));
3440

3541
ObjectReader reader = (stream, session) =>

src/Hyperion/SerializerFactories/FSharpListSerializerFactory.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,13 @@ public override ValueSerializer BuildSerializer(Serializer serializer, Type type
4848
ConcurrentDictionary<Type, ValueSerializer> typeMapping)
4949
{
5050
var x = new ObjectSerializer(type);
51-
typeMapping.TryAdd(type, x);
51+
if (serializer.Options.KnownTypesDict.TryGetValue(type, out var index))
52+
{
53+
var wrapper = new KnownTypeObjectSerializer(x, index);
54+
typeMapping.TryAdd(type, wrapper);
55+
}
56+
else
57+
typeMapping.TryAdd(type, x);
5258

5359
var elementType = GetEnumerableType(type);
5460
var arrType = elementType.MakeArrayType();

src/Hyperion/SerializerFactories/FSharpMapSerializerFactory.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,13 @@ public override ValueSerializer BuildSerializer(Serializer serializer, Type type
6464
ConcurrentDictionary<Type, ValueSerializer> typeMapping)
6565
{
6666
var x = new ObjectSerializer(type);
67-
typeMapping.TryAdd(type, x);
67+
if (serializer.Options.KnownTypesDict.TryGetValue(type, out var index))
68+
{
69+
var wrapper = new KnownTypeObjectSerializer(x, index);
70+
typeMapping.TryAdd(type, wrapper);
71+
}
72+
else
73+
typeMapping.TryAdd(type, x);
6874

6975
var keyType = GetKeyType(type);
7076
var valueType = GetValyeType(type);

0 commit comments

Comments
 (0)