/// <summary> /// 返回指定类型的对象,其值等效于指定字符串对象。 /// </summary> /// <param name="context"> </param> /// <param name="input"> 需要转换类型的字符串对象 </param> /// <param name="outputType"> 换转后的类型 </param> /// <param name="success"> 是否成功 </param> protected override IDictionary <K, V> ChangeType(ConvertContext context, string input, Type outputType, out bool success) { input = input?.Trim() ?? ""; if (input.Length == 0) { var keyConvertor = context.Get <K>(); var valueConvertor = context.Get <V>(); var builder = new DictionaryBuilder(context, outputType, keyConvertor, valueConvertor); // ReSharper disable once AssignmentInConditionalExpression return((success = builder.TryCreateInstance()) ? builder.Instance : null); } if (input?.Length > 2) { if ((input[0] == '{') && (input[input.Length - 1] == '}')) { try { var result = ComponentServices.ToJsonObject(outputType, input); success = true; return((IDictionary <K, V>)result); } catch (Exception ex) { context.AddException(ex); } } } success = false; return(null); }
/// <summary> /// 返回指定类型的对象,其值等效于指定对象。 /// </summary> /// <param name="context"> </param> /// <param name="input"> 需要转换类型的对象 </param> /// <param name="outputType"> 换转后的类型 </param> /// <param name="success"> 是否成功 </param> /// <returns> </returns> protected override IDictionary <K, V> ChangeTypeImpl(ConvertContext context, object input, Type outputType, out bool success) { if (input.IsNull()) { success = true; return(null); } var keyConvertor = context.Get <K>(); var valueConvertor = context.Get <V>(); var builder = new DictionaryBuilder(context, outputType, keyConvertor, valueConvertor); if (builder.TryCreateInstance() == false) { success = false; return(null); } var mapper = new Mapper(input); if (mapper.Error != null) { context.AddException(mapper.Error); success = false; return(null); } while (mapper.MoveNext()) { if (builder.Add(mapper.Key, mapper.Value) == false) { success = false; return(null); } } success = true; return(builder.Instance); }
/// <summary> /// 返回指定类型的对象,其值等效于指定对象。 /// </summary> /// <param name="context"> </param> /// <param name="input"> 需要转换类型的对象 </param> /// <param name="outputType"> 换转后的类型 </param> /// <param name="success"> 是否成功 </param> /// <returns> </returns> protected override IDictionary ChangeTypeImpl(ConvertContext context, object input, Type outputType, out bool success) { if ((input == null) || input is DBNull) { success = true; return(null); } var builder = new DictionaryBuilder(outputType, context); if (builder.TryCreateInstance() == false) { success = false; return(null); } var mapper = new Mapper(input); if (mapper.Error != null) { context.AddException(mapper.Error); success = false; return(null); } while (mapper.MoveNext()) { if (builder.Add(mapper.Key, mapper.Value) == false) { success = false; return(null); } } success = true; return(builder.Instance); }