src/Converters/ListConverter.cs

(开头部分) 2KB

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

using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq.Expressions;
using System.Text;

namespace Rapidity.Json.Converters
{
    /// <summary>
    /// 泛型List<>类型Converter
    /// </summary>
    internal class ListConverter : EnumerableConverter, IConverterCreator
    {

        public ListConverter(Type type, Type itemType) :  base(type, itemType)
        {
        }

        public override bool CanConvert(Type type)
        {
            if (type.IsGenericType && typeof(IEnumerable).IsAssignableFrom(type))
            {
                var args = type.GetGenericArguments();
                if (args.Length != 1) return false;
                var listType = typeof(List<>).MakeGenericType(args[0]);
                var collectionType = typeof(Collection<>).MakeGenericType(args[0]);
                if (type == listType
                    || type == collectionType
                    || type.IsAssignableFrom(listType)
                    || type.IsAssignableFrom(collectionType))
                    return true;
            }
            return false;
        }

        /// <summary>
        /// 创建泛型List<>类型
        /// </summary>
        /// <param name="type"></param>
        /// <param name="provider"></param>
        /// <returns></returns>
        public override ITypeConverter Create(Type type)
        {
            var itemType = type.GetGenericArguments()[0];
            if (type.IsClass && !type.IsAbstract)
                return new ListConverter(type, itemType);
            var listType = typeof(List<>).MakeGenericType(itemType);
            if (type.IsAssignableFrom(listType))
                return new ListConverter(listType, itemType);
            var collectionType = typeof(Collection<>).MakeGenericType(itemType);
            if (type.IsAssignableFrom(collectionType))
                return new ListConverter(collectionType, itemType);
            return null;
        }
    }

    /// <summary>
    /// ArrayList类型Converter
    /// </summary>
后面还有 17 行代码,解锁后查看完整代码

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

AI 解读

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

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