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);
     }
 }
Exemple #3
0
        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);
        }
Exemple #6
0
        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);
        }