public object ConvertTo(IIonValue value, Type type) { var props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public); var instance = Activator.CreateInstance(type); var members = type.GetMembers(BindingFlags.Public | BindingFlags.Instance) .Where(m => (m.MemberType == MemberTypes.Field || m.MemberType == MemberTypes.Property)); foreach (MemberInfo member in members) { var field = value.GetField(member.Name); var memberType = member.GetUnderlyingType(); var fieldHandler = FieldHandlers.GetHandler(memberType); if (field != null) { var fieldValue = fieldHandler.ConvertTo(field, memberType); if (member.MemberType == MemberTypes.Field) { type.GetField(member.Name).SetValue(instance, fieldValue); continue; } if (member.MemberType == MemberTypes.Property) { if (((PropertyInfo)member).CanWrite) { type.GetProperty(member.Name).SetValue(instance, fieldValue); } } } } return(instance); }
private void BuildIonList(IIonValue list, IEnumerable instance) { foreach (var item in instance) { var itemType = item.GetType(); var handler = FieldHandlers.GetHandler(itemType); IIonValue listItem = handler.ConvertFrom(item); list.Add(listItem); } }
private void BuildDictionary(IIonValue dict, IDictionary instance) { Type[] typeParameters = instance.GetType().GetGenericArguments(); var keyType = typeParameters[0]; var valueType = typeParameters[1]; foreach (var key in instance.Keys) { var handler = FieldHandlers.GetHandler(valueType); var item = instance[key]; IIonValue value = handler.ConvertFrom(item); dict.SetField(key.ToString(), value); } }
private IIonValue GetPropertyValue(PropertyInfo info, object instance) { Type type = info.PropertyType; var handler = FieldHandlers.GetHandler(type); var instanceValue = info.GetValue(instance); if (instanceValue == null) { return(null); } var value = handler.ConvertFrom(instanceValue); return(value); }
public object ConvertTo(IIonValue value, Type type) { var listGenericArg = type.GetGenericArguments()[0]; var handler = FieldHandlers.GetHandler(listGenericArg); var list = (IList)Activator.CreateInstance(type); var enumerator = value.GetEnumerator(); while (enumerator.MoveNext()) { list.Add(handler.ConvertTo(enumerator.Current, listGenericArg)); } return(list); }
public object ConvertTo(IIonValue value, Type type) { var genericArgs = type.GetGenericArguments(); var keyGenericArg = genericArgs[0]; var valueGenericArg = genericArgs[1]; var valueHandler = FieldHandlers.GetHandler(valueGenericArg); var dict = (IDictionary)Activator.CreateInstance(type); var enumerator = value.GetEnumerator(); while (enumerator.MoveNext()) { var itemField = enumerator.Current; var key = System.Convert.ChangeType(itemField.FieldNameSymbol.Text, keyGenericArg); var itemValue = valueHandler.ConvertTo(enumerator.Current, valueGenericArg); dict.Add(key, itemValue); } return(dict); }