示例#1
0
        public static object ConvertValueToObjectMemberType(object target, MemberInfo memberInfo, object value)
        {
            ChoGuard.ArgumentNotNull(target, "Target");
            object memberValue = value;

            if (target is Type)
            {
                return(ChoConvert.ConvertFrom(null, memberValue, ChoType.GetMemberType((Type)target, memberInfo.Name),
                                              ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo)));
            }
            else
            {
                return(ChoConvert.ConvertFrom(target, memberValue, ChoType.GetMemberType(target.GetType(), memberInfo.Name),
                                              ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo)));
            }
        }
示例#2
0
        private static string GetNFormatMemberValue(object target, MemberInfo memberInfo, bool collectErrMsgs, ChoMemberFormatterAttribute memberFormaterAttribute,
                                                    ChoMemberItemFormatterAttribute memberItemFormaterAttribute, BindingFlags bindingFlags)
        {
            try
            {
                string memberText  = null;
                object memberValue = ChoType.GetMemberValue(target, memberInfo);
                if (memberValue == target)
                {
                    return(null);
                }

                if (memberFormaterAttribute == null)
                {
                    object[] typeConverters = ChoTypeDescriptor.GetTypeConverters(memberInfo);
                    if (typeConverters != null && typeConverters.Length > 0)
                    {
                        memberText = (string)ChoConvert.ConvertTo(target, memberValue, typeof(string), typeConverters, ChoTypeDescriptor.GetTypeConverterParams(memberInfo), null);
                        return(memberText);
                    }
                }
                memberText = ChoFormattableObject.ToString(memberValue, collectErrMsgs, memberFormaterAttribute, memberItemFormaterAttribute, bindingFlags);
                if (memberText.ContainsMultiLines())
                {
                    memberText = Environment.NewLine + memberText.Indent();
                }
                return(memberText);
            }
            catch (ChoFatalApplicationException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new ChoApplicationException(memberInfo.Name, ex);
            }
        }
示例#3
0
        internal static Dictionary <string, object> ToPersistableDictionaryCollection(ChoBaseConfigurationElement configElement, Type itemType)
        {
            ChoGuard.ArgumentNotNull(configElement, "ConfigElement");

            object target = configElement.ConfigObject;

            ChoGuard.ArgumentNotNull(target, "Target");

            Dictionary <string, object> dict = new Dictionary <string, object>();

            //Dictionary<string, MemberInfo> configMemberInfos = ChoType.GetMembersDictionary(target.GetType(), typeof(ChoConfigurationPropertyAttribute));
            //MemberInfo[] memberInfos = ChoType.GetMembers(target.GetType(), typeof(ChoConfigurationPropertyAttribute));
            MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(target.GetType());
            if (memberInfos == null || memberInfos.Length == 0)
            {
                return(dict);
            }

            ChoPropertyInfoAttribute memberInfoAttribute = null;
            string name = null;

            foreach (MemberInfo memberInfo in memberInfos)
            {
                if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null)
                {
                    continue;
                }

                object memberValue = ChoType.GetMemberValue(target, memberInfo.Name);
                memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute));
                name = ChoType.GetMemberName(memberInfo, memberInfoAttribute);

                if (target is ChoConfigurableObject && ((ChoConfigurableObject)target).RaiseBeforeConfigurationObjectMemberPersist(memberInfo.Name, name, ref memberValue))
                {
                    dict.Add(name, memberValue);
                }
                else
                {
                    if (memberInfoAttribute != null && !memberInfoAttribute.Persistable)
                    {
                        continue;
                    }

                    memberValue = ChoType.GetMemberValue(target, memberInfo.Name);
                    Type memberType = ChoConfigurationMetaDataManager.GetSourceType(configElement, name, memberInfoAttribute);

                    if (memberType == null)
                    {
                        if (itemType == typeof(Object))
                        {
                            memberType = ChoType.GetMemberType(memberInfo);
                        }
                        else
                        {
                            memberType = itemType;
                        }
                    }
                    dict.Add(name, ChoConvert.ConvertTo(target, memberValue, memberType,
                                                        ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo), null));
                }
            }
            return(dict);
        }
示例#4
0
        public static object GetConvertedObjectMemberValue(object target, MemberInfo memberInfo)
        {
            ChoGuard.ArgumentNotNull(target, "Target");
            object memberValue = GetObjectMemberValue(target, memberInfo);

            return(ChoConvert.ConvertFrom(target, memberValue, ChoType.GetMemberType(target.GetType(), memberInfo.Name),
                                          ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo)));
        }
示例#5
0
        internal static NameValueCollection ToPersistableNameValueCollection(object target)
        {
            ChoGuard.ArgumentNotNull(target, "Target");

            NameValueCollection nameValues = new NameValueCollection();

            //Dictionary<string, MemberInfo> configMemberInfos = ChoType.GetMembersDictionary(target.GetType(), typeof(ChoConfigurationPropertyAttribute));
            //MemberInfo[] memberInfos = ChoType.GetMembers(target.GetType(), typeof(ChoConfigurationPropertyAttribute));
            MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(target.GetType());
            if (memberInfos == null || memberInfos.Length == 0)
            {
                return(nameValues);
            }

            ChoPropertyInfoAttribute memberInfoAttribute = null;
            string name = null;

            foreach (MemberInfo memberInfo in memberInfos)
            {
                if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null)
                {
                    continue;
                }

                object memberValue = ChoType.GetMemberValue(target, memberInfo.Name);
                memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute));
                //if (memberInfoAttribute == null) continue;

                name = ChoType.GetMemberName(memberInfo, memberInfoAttribute);

                if (target is ChoConfigurableObject && ((ChoConfigurableObject)target).RaiseBeforeConfigurationObjectMemberPersist(memberInfo.Name, name, ref memberValue))
                {
                    nameValues.Add(name, memberValue == null ? null : memberValue.ToString());
                }
                else
                {
                    if (memberInfoAttribute != null && !memberInfoAttribute.Persistable)
                    {
                        continue;
                    }

                    memberValue = ChoType.GetMemberValue(target, memberInfo.Name);

                    nameValues.Add(name, ChoString.ToString(ChoConvert.ConvertTo(target, memberValue, typeof(string),
                                                                                 ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo), null),
                                                            String.Empty, String.Empty));
                }
            }
            return(nameValues);
        }
示例#6
0
        public static object ConvertTo(object value, MemberInfo memberInfo, Type targetType, object sourceObject = null, CultureInfo culture = null)
        {
            ChoGuard.ArgumentNotNull((object)memberInfo, "MemberInfo");

            return(ChoConvert.ConvertTo(value, targetType, sourceObject, ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo), culture));
        }
示例#7
0
        public static bool TryConvertTo(object value, MemberInfo memberInfo, Type targetType, object sourceObject, CultureInfo culture, out object output)
        {
            output = null;
            ChoGuard.ArgumentNotNull((object)memberInfo, "MemberInfo");

            try
            {
                output = ChoConvert.ConvertTo(value, targetType, sourceObject, ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo), culture);
                return(true);
            }
            catch
            {
                return(false);
            }
        }
示例#8
0
 public static object ConvertTo(object value, Type targetType, CultureInfo culture = null)
 {
     if (value == null)
     {
         return(ChoConvert.ConvertTo(value, targetType, value, null, null, culture));
     }
     else
     {
         return(ChoConvert.ConvertTo(value, targetType, value, ChoTypeDescriptor.GetTypeConverters(value.GetType()), ChoTypeDescriptor.GetTypeConverterParams(value.GetType()), culture));
     }
 }
示例#9
0
        public static object ConvertFrom(object target, MemberInfo memberInfo, CultureInfo culture)
        {
            ChoGuard.ArgumentNotNull(target, "Target");
            ChoGuard.ArgumentNotNull(memberInfo, "MemberInfo");

            Type objType = null;

            if (target is Type)
            {
                objType = target as Type;
                target  = null;
            }
            else
            {
                objType = target.GetType();
            }

            if (target == null)
            {
                return(ChoConvert.ConvertFrom(target, ChoType.GetMemberValue(objType, memberInfo.Name), ChoType.GetMemberType(memberInfo),
                                              ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo), culture));
            }
            else
            {
                return(ChoConvert.ConvertFrom(target, ChoType.GetMemberValue(target, memberInfo.Name), ChoType.GetMemberType(memberInfo),
                                              ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo), culture));
            }
        }