public MethodInfoEx(MethodInfo method) { if (method == null) { throw new ArgumentNullException("method"); } _Method = method; _Caller = Literacy.Cache(method); }
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; } }