src/Converters/TypeConverterProvider.cs

(开头部分) 2KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;

namespace Rapidity.Json.Converters
{
    public abstract class TypeConverterProvider
    {
        public abstract IReadOnlyCollection<IConverterCreator> AllConverterFactories();

        public abstract void AddConverterFactory(IConverterCreator converter);

        public virtual ITypeConverter Build(Type type)
        {
            ITypeConverter convert = null;
            foreach (var creator in AllConverterFactories())
            {
                if (creator.CanConvert(type))
                {
                    convert = creator.Create(type);
                    break; 
                }
            }
            if (convert == null) throw new JsonException($"创建{type}的{nameof(ITypeConverter)}失败,不支持的类型");
            return convert;
        }
    }

    /// <summary>
    /// 
    /// </summary>
    internal class DefaultTypeConverterProvider : TypeConverterProvider
    {
        private static Dictionary<Type, ITypeConverter> _dictionary = new Dictionary<Type, ITypeConverter>();
        
        private List<IConverterCreator> _converters;

        public override IReadOnlyCollection<IConverterCreator> AllConverterFactories() => _converters;

        public DefaultTypeConverterProvider()
        {
            _converters = new List<IConverterCreator>()
            {
                new StringConverter(null),
                new EnumConverter(null),
                new DateTimeConverter(null),
                new NullableConverter(null),
                new ValueConverter(null),
                new ListConverter(null,null),
                new ArrayConverter(null),
                new DictionaryConverter(null,null,null),
                new KeyValuePairConverter(null,null,null),
                new StringKeyValueConverter(null),
                new ArrayListConverter(null),
                new JsonTokenConverter(null),
                new ObjectConverter(null),
            };
        }
        public override void AddConverterFactory(IConverterCreator converter)
        {
后面还有 13 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。