src/Converters/KeyValuePairConverter.cs
(开头部分) 4KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
namespace Rapidity.Json.Converters
{
internal class KeyValuePairConverter : ObjectConverter, IConverterCreator
{
public Type KeyType { get; }
public Type ValueType { get; }
private const string KeyName = "Key";
private const string ValueName = "Value";
public KeyValuePairConverter(Type type, Type keyType, Type valueType) : base(type)
{
this.KeyType = keyType;
this.ValueType = valueType;
}
public override bool CanConvert(Type type)
{
return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(KeyValuePair<,>);
}
public override ITypeConverter Create(Type type)
{
var args = type.GetGenericArguments();
return new KeyValuePairConverter(type, args[0], args[1]);
}
private Func<object, object, object> _createFunc;
private Func<object, object, object> CreateFunc
{
get
{
if (_createFunc == null)
{
var keyParam = Expression.Parameter(typeof(object));
var valueParam = Expression.Parameter(typeof(object));
var keyExp = Expression.Convert(keyParam, KeyType);
var valueExp = Expression.Convert(valueParam, ValueType);
var constr = Type.GetConstructor(new Type[] { KeyType, ValueType });
var newExp = Expression.New(constr, keyExp, valueExp);
var body = Expression.TypeAs(newExp, typeof(object));
var lambda = Expression.Lambda<Func<object, object, object>>(body, keyParam, valueParam);
_createFunc = lambda.Compile();
}
return _createFunc;
}
}
public override object FromReader(JsonReader reader, JsonOption option)
{
object key = null;
object value = null;
do
{
switch (reader.TokenType)
后面还有 52 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
