Example #1
0
        public override DataSerializer GetSerializer(SerializerSelector selector, [NotNull] Type type)
        {
            DataSerializer dataSerializer;

            if (!serializersByType.TryGetValue(type, out dataSerializer))
            {
                if (baseType.GetTypeInfo().IsAssignableFrom(type.GetTypeInfo()))
                {
                    dataSerializer = (DataSerializer)Activator.CreateInstance(serializerGenericType.MakeGenericType(type));
                    selector.EnsureInitialized(dataSerializer);
                    serializersByTypeId.TryAdd(dataSerializer.SerializationTypeId, dataSerializer);
                }
                // Add it even if null (so that failures are cached too)
                serializersByType.TryAdd(type, dataSerializer);
            }
            return(dataSerializer);
        }