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 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
