/// <summary> 从指定的 Type 创建新的 JsonType 对象,该方法必须保证类型公开的构造函数有且只有一个 /// </summary> public JsonType(Type type) : this(type, 0) { _ctor = Literacy.CreateNewObject(type); if (_ctor == null) { if (TypeInfo.IsSpecialType) { return; } var ctors = type.GetConstructors(); switch (ctors.Length) { case 0: _ctor = args => { throw new TypeInitializationException(TypesHelper.DisplayName(type), new MissingMethodException("当前类型没有构造函数")); }; break; case 1: _ctor = Literacy.CreateNewObject(ctors[0]); break; default: _ctor = args => { throw new TypeInitializationException(TypesHelper.DisplayName(type), new MethodAccessException("构造函数调用不明确")); }; break; } } }
/// <summary> 从指定的 Type 创建新的 JsonType 对象,并指定构造函数 /// </summary> public JsonType(Type type, ConstructorInfo ctor) : this(type, 1) { if (ctor == null && TypeInfo.IsSpecialType) { return; } AreNull(ctor, "ctor"); AreTrue(type == ctor.ReflectedType, "ctor不属于当前类型"); _ctor = Literacy.CreateNewObject(ctor); }
/// <summary> 从指定的 Type 创建新的 JsonType 对象,并指定构造函数的参数 /// </summary> public JsonType(Type type, Type[] ctorArgsType) : this(type, 2) { _ctor = Literacy.CreateNewObject(type, ctorArgsType); if (_ctor == null && TypeInfo.IsSpecialType) { return; } else { throw new ArgumentException("没有找到符合条件的构造函数"); } }