Esempio n. 1
0
        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);
        }