using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; namespace ANX.Framework.Content.Pipeline.Helpers { public static class PropertyExtensions { public static TypeConverter GetConverter(this PropertyInfo property) { TypeConverterAttribute typeConverterAttribute = (TypeConverterAttribute)property.GetCustomAttributes(typeof(TypeConverterAttribute), true).FirstOrDefault(); if (typeConverterAttribute != null && typeConverterAttribute.ConverterTypeName != null && typeConverterAttribute.ConverterTypeName.Length > 0) { Type converterType = TypeHelper.GetType(typeConverterAttribute.ConverterTypeName); if (converterType != null && typeof(TypeConverter).IsAssignableFrom(converterType)) { return (TypeConverter)CreateInstance(converterType, property.PropertyType); } } return TypeDescriptor.GetConverter(property.PropertyType); } private static object CreateInstance(Type targetType, Type typeParam) { var parameterTypes = new Type[] { typeof(Type) }; ConstructorInfo constructor = targetType.GetConstructor(parameterTypes); if (constructor != null) { return TypeDescriptor.CreateInstance(null, targetType, parameterTypes, new object[] { typeParam }); } return TypeDescriptor.CreateInstance(null, targetType, null, null); } } }