using System; namespace QFSW.QC { /// /// Serializer for all types inheriting from a single type. /// /// Base type of the types to serialize. public abstract class PolymorphicQcSerializer : IQcSerializer where T : class { private Func _recursiveSerializer; public virtual int Priority => -1000; public bool CanSerialize(Type type) { return typeof(T).IsAssignableFrom(type); } string IQcSerializer.SerializeFormatted(object value, QuantumTheme theme, Func recursiveSerializer) { _recursiveSerializer = recursiveSerializer; return SerializeFormatted((T)value, theme); } protected string SerializeRecursive(object value, QuantumTheme theme) { return _recursiveSerializer(value, theme); } public abstract string SerializeFormatted(T value, QuantumTheme theme); } }