Пример #1
0
 public MethodInfoEx(MethodInfo method)
 {
     if (method == null)
     {
         throw new ArgumentNullException("method");
     }
     _Method = method;
     _Caller = Literacy.Cache(method);
 }
Пример #2
0
        private JsonType(Type type, int i)
        {
            AreNull(type, "type");
            Type     = type;
            TypeInfo = TypesHelper.GetTypeInfo(type);
            _members = new Dictionary <string, JsonMember>(StringComparer.OrdinalIgnoreCase);
            var list = new List <JsonMember>();

            //枚举属性
            foreach (var p in Type.GetProperties())
            {
                var jm = JsonMember.Create(p);
                if (jm != null)
                {
                    AreTrue(_members.ContainsKey(jm.JsonName), "JsonName重复:" + jm.JsonName);
                    _members[jm.JsonName] = jm;
                    list.Add(jm);
                }
            }
            PropertyCount = list.Count;
            //枚举字段
            foreach (var p in Type.GetFields())
            {
                var jm = JsonMember.Create(p);
                if (jm != null)
                {
                    AreTrue(_members.ContainsKey(jm.JsonName), "JsonName重复:" + jm.JsonName);
                    _members[jm.JsonName] = jm;
                    list.Add(jm);
                }
            }
            Members = list.ToArray();
            //设置 TypeCodes ,ElementType ,KeyType
            switch (TypeCodes = TypeInfo.TypeCodes)
            {
            case TypeCodes.IListT:
                IsList = true;
                var args = SearchGenericInterface(type, typeof(IList <>)).GetGenericArguments();
                ElementType = JsonType.Get(args[0]);
                AddValue    = Literacy.CreateCaller(type.GetMethod("Add", args));
                break;

            case TypeCodes.IList:
                IsList = true;
                if (type.IsArray)
                {
                    ElementType = JsonType.Get(type.GetElementType());
                    AddValue    = (o, v) => ((System.Collections.ArrayList)o).Add(v[0]);
                }
                else
                {
                    ElementType = JsonType.Get(typeof(object));
                    AddValue    = (o, v) => ((System.Collections.IList)o).Add(v[0]);
                }
                break;

            case TypeCodes.IDictionary:
                IsDictionary = true;
                KeyType      = JsonType.Get(typeof(object));
                ElementType  = KeyType;
                AddKeyValue  = (o, v) => { ((System.Collections.IDictionary)o).Add(v[0], v[1]); return(null); };
                break;

            case TypeCodes.IDictionaryT:
                IsDictionary = true;
                var dictType = SearchGenericInterface(type, typeof(IDictionary <,>));
                args        = dictType.GetGenericArguments();
                KeyType     = JsonType.Get(args[0]);
                ElementType = JsonType.Get(args[1]);
                AddKeyValue = Literacy.CreateCaller(dictType.GetMethod("Add", args), type);
                break;

            default:
                break;
            }
        }