public ParameterList GetParameters(string name, object obj)
{
var parameterList = new ParameterList() {Name = name};
var pred = new Predicate<Attribute>(a =>
{
var t = a.GetType();
return t.FullName.Contains("ComponentModel") && t.Name != "PropertyTabAttribute" && t.Name != "ToolboxItemAttribute";
});
foreach (var info in obj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
if (info.CanRead && info.GetCustomAttribute(typeof(TypeConverterAttribute)) == null)
{
var list = info.GetCustomAttributes().Where(p => pred(p)).ToList();
if (!info.CanWrite)
{
var item = new ReadOnlyAttribute(true);
if (!list.Contains(item))
list.Add(item);
}
parameterList.Add(new Parameter(info.Name, info.GetValue(obj), info.PropertyType.AssemblyQualifiedName, list.ToArray()));
}
}
var fields = obj.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public).Where(f => f.GetCustomAttribute(typeof(TypeConverterAttribute)) == null);
foreach (var param in fields.Select(f => new Parameter(f.Name, f.GetValue(obj), f.FieldType.AssemblyQualifiedName, f.GetCustomAttributes().Where(a => pred(a)).ToArray())))
parameterList.Add(param);
return parameterList;
}