protected virtual object Deserialize(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value != null && value.GetType().IsCollectionType()) { if (targetType != typeof(object) && !targetType.IsSimple() && !typeof(ICollection).IsAssignableFrom(targetType)) { IList coll = value as IList; var itemType = value.GetType().GetItemType(); if (itemType == typeof(object) || itemType.IsSimple()) { value = ChoActivator.CreateInstance(targetType); foreach (var p in ChoTypeDescriptor.GetProperties <ChoArrayIndexAttribute>(targetType).Select(pd => new { pd, a = ChoTypeDescriptor.GetPropetyAttribute <ChoArrayIndexAttribute>(pd) }) .GroupBy(g => g.a.Position).Select(g => g.First()).Where(g => g.a.Position >= 0).OrderBy(g => g.a.Position)) { if (p.a.Position < coll.Count) { ChoType.ConvertNSetPropertyValue(value, p.pd.Name, coll[p.a.Position], culture); } } } } } return(value); }
public static object CreateInstanceAndDefaultToMembers(this Type type, IDictionary <string, ChoRecordFieldConfiguration> fcs) { var obj = ChoActivator.CreateInstance(type); object defaultValue = null; foreach (PropertyDescriptor pd in ChoTypeDescriptor.GetProperties(type)) { try { if (!fcs.ContainsKey(pd.Name) || !fcs[pd.Name].IsDefaultValueSpecified) { continue; } defaultValue = fcs[pd.Name].DefaultValue; if (defaultValue != null) { ChoType.ConvertNSetPropertyValue(obj, pd.Name, defaultValue); } } catch (Exception ex) { ChoETLFramework.WriteLog(ChoETLFramework.TraceSwitch.TraceError, "Error while assigning default value '{0}' to '{1}' member. {2}".FormatString(defaultValue, ChoType.GetMemberName(pd), ex.Message)); } } return(obj); }
public static void Initialize(this object target) { if (target == null) { return; } object defaultValue = null; foreach (PropertyDescriptor pd in ChoTypeDescriptor.GetProperties <DefaultValueAttribute>(target.GetType())) { try { defaultValue = ChoTypeDescriptor.GetPropetyAttribute <DefaultValueAttribute>(pd).Value; if (defaultValue != null) { ChoType.ConvertNSetPropertyValue(target, pd.Name, defaultValue); } } catch (Exception ex) { ChoETLFramework.WriteLog(ChoETLFramework.TraceSwitch.TraceError, "Error while assigning default value '{0}' to '{1}' member. {2}".FormatString(defaultValue, ChoType.GetMemberName(pd), ex.Message)); } } //ChoETLFramework.InitializeObject(target); if (target is IChoInitializable) { ((IChoInitializable)target).Initialize(); } }