public static void LoadData(Data obj, Type objectType, CSVRow row) { PropertyInfo[] properties = objectType.GetProperties(); for (int i = 0; i < properties.Length; i++) { PropertyInfo propertyInfo = properties[i]; if (propertyInfo.PropertyType.IsGenericType) { Type arg_39_0 = typeof(List <>); Type[] genericArguments = propertyInfo.PropertyType.GetGenericArguments(); Type expr_3E = arg_39_0.MakeGenericType(genericArguments); object obj2 = Activator.CreateInstance(expr_3E); MethodInfo method = expr_3E.GetMethod("Add"); string memberName = ((DefaultMemberAttribute)obj2.GetType().GetCustomAttributes(typeof(DefaultMemberAttribute), true)[0]).MemberName; PropertyInfo property = obj2.GetType().GetProperty(memberName); for (int j = row.GetRowOffset(); j < row.GetRowOffset() + row.GetArraySize(propertyInfo.Name); j++) { string text = row.GetValue(propertyInfo.Name, j - row.GetRowOffset()); if (text == string.Empty && j != row.GetRowOffset()) { text = property.GetValue(obj2, new object[] { j - row.GetRowOffset() - 1 }).ToString(); } if (text == string.Empty) { object obj3 = genericArguments[0].IsValueType ? Activator.CreateInstance(genericArguments[0]) : string.Empty; method.Invoke(obj2, new object[] { obj3 }); } else { method.Invoke(obj2, new object[] { Convert.ChangeType(text, genericArguments[0]) }); } } propertyInfo.SetValue(obj, obj2); } else if (row.GetValue(propertyInfo.Name, 0) == string.Empty) { propertyInfo.SetValue(obj, null, null); } else { propertyInfo.SetValue(obj, Convert.ChangeType(row.GetValue(propertyInfo.Name, 0), propertyInfo.PropertyType), null); } } }
public void LoadData(Data obj, Type objectType, CSVRow row) { foreach (var prop in objectType.GetProperties()) { if (prop.PropertyType.IsGenericType) { var listType = typeof(List <>); var genericArgs = prop.PropertyType.GetGenericArguments(); var concreteType = listType.MakeGenericType(genericArgs); var newList = Activator.CreateInstance(concreteType); var add = concreteType.GetMethod("Add"); var indexerName = ((DefaultMemberAttribute) newList.GetType().GetCustomAttributes(typeof(DefaultMemberAttribute), true)[0]).MemberName; var indexerProp = newList.GetType().GetProperty(indexerName); for (var i = row.GetRowOffset(); i < row.GetRowOffset() + row.GetArraySize(prop.Name); i++) { var v = row.GetValue(prop.Name, i - row.GetRowOffset()); if (v == string.Empty && i != row.GetRowOffset()) { v = indexerProp.GetValue(newList, new object[] { i - row.GetRowOffset() - 1 }).ToString(); } if (v == string.Empty) { var o = genericArgs[0].IsValueType ? Activator.CreateInstance(genericArgs[0]) : ""; add.Invoke(newList, new[] { o }); } else { add.Invoke(newList, new[] { Convert.ChangeType(v, genericArgs[0]) }); } } prop.SetValue(obj, newList, null); } else { if (row.GetValue(prop.Name, 0) == string.Empty) { prop.SetValue(obj, null, null); } else { prop.SetValue(obj, Convert.ChangeType(row.GetValue(prop.Name, 0), prop.PropertyType), null); } } } }
public static void LoadData(Data obj, Type objectType, CSVRow row) { foreach (var prop in objectType.GetProperties()) { if (prop.PropertyType.IsGenericType) { var listType = typeof(List<>); var genericArgs = prop.PropertyType.GetGenericArguments(); var concreteType = listType.MakeGenericType(genericArgs); var newList = Activator.CreateInstance(concreteType); var add = concreteType.GetMethod("Add"); var indexerName = ((DefaultMemberAttribute) newList.GetType().GetCustomAttributes(typeof(DefaultMemberAttribute), true)[0]).MemberName; var indexerProp = newList.GetType().GetProperty(indexerName); for (var i = row.GetRowOffset(); i < row.GetRowOffset() + row.GetArraySize(prop.Name); i++) { var v = row.GetValue(prop.Name, i - row.GetRowOffset()); if (v == string.Empty && i != row.GetRowOffset()) v = indexerProp.GetValue(newList, new object[] { i - row.GetRowOffset() - 1 }).ToString(); if (v == string.Empty) { var o = genericArgs[0].IsValueType ? Activator.CreateInstance(genericArgs[0]) : ""; add.Invoke(newList, new[] { o }); } else add.Invoke(newList, new[] { Convert.ChangeType(v, genericArgs[0]) }); } prop.SetValue(obj, newList); } else { if (row.GetValue(prop.Name, 0) == string.Empty) prop.SetValue(obj, null, null); else prop.SetValue(obj, Convert.ChangeType(row.GetValue(prop.Name, 0), prop.PropertyType), null); } } }