src/Converters/ArrayConverter.cs

(开头部分) 6KB

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

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

namespace Rapidity.Json.Converters
{
    //internal class ArrayConverter : EnumerableConverter, IConverterCreator
    //{
    //    private Type _arrayType;

    //    public ArrayConverter(Type type, Type listType, Type itemType) :
    //        base(listType, itemType)
    //    {
    //        _arrayType = type;
    //    }

    //    protected override Func<object, IEnumerator> BuildGetEnumberatorMethod(Type type)
    //    {
    //        return base.BuildGetEnumberatorMethod(_arrayType);
    //    }

    //    private Func<object, object> _toArray;
    //    public Func<object, object> ToArray => _toArray = _toArray ?? BuildToArrayMethod(Type);

    //    protected Func<object, object> BuildToArrayMethod(Type type)
    //    {
    //        var objExp = Expression.Parameter(typeof(object), "list");

    //        var equalExp = Expression.Equal(objExp, Expression.Constant(null));

    //        var listExp = Expression.TypeAs(objExp, type);
    //        var method = type.GetMethod("ToArray");
    //        var call = Expression.Call(listExp, method);
    //        //判断入参是否为null
    //        var body = Expression.Condition(equalExp,
    //                            objExp,
    //                            Expression.TypeAs(call, typeof(object)));
    //        var expression = Expression.Lambda<Func<object, object>>(body, objExp);
    //        return expression.Compile();
    //    }

    //    public override bool CanConvert(Type type)
    //    {
    //        return type.IsArray;
    //    }

    //    public override ITypeConverter Create(Type type)
    //    {
    //        var elementType = type.GetElementType();
    //        var listType = typeof(List<>).MakeGenericType(elementType);
    //        return new ArrayConverter(type, listType, elementType);
    //    }

    //    public override object FromReader(JsonReader reader, JsonOption option)
    //    {
    //        var list = base.FromReader(reader, option);
    //        return ToArray(list);
    //    }

后面还有 116 行代码,解锁后查看完整代码

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

AI 解读

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

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