protected override JsonContract CreateContract(Type objectType) { var contract = base.CreateContract(objectType); var entityTypeContract = TypeCache.GetEntityTypeContract(objectType); contract.Converter = objectType switch { _ when objectType.HasAttribute <JsonConverterAttribute>(out var attribute) => (JsonConverter)Activator.CreateInstance(attribute.ConverterType, attribute.ConverterParameters), _ when objectType.IsSubclassOf(typeof(Type)) => TypeConverter, _ when objectType == typeof(Headers) => HeadersConverter, _ when objectType == typeof(ContentType) => ContentTypeConverter, _ when objectType == typeof(ContentTypes) => ContentTypesConverter, _ when objectType == typeof(Term) => ToStringConverter, _ when objectType == typeof(Aggregator) => AggregatorTemplateConverter, _ when objectType.IsEnum => StringEnumConverter, _ when objectType.ImplementsGenericInterface(typeof(IAsyncEnumerable <>)) => AsyncEnumerableConverter, _ => contract.Converter }; if (entityTypeContract.CustomCreator != null) { contract.DefaultCreator = () => entityTypeContract.CustomCreator(); } return(contract); }