У меня есть ExpandoObject, который я отправляю методу внешней библиотеки, который принимает объект. Из того, что я видел, эта внешняя библиотека использует TypeDescriptor.GetProperties внутри, и это, кажется, вызывает некоторые проблемы с моим ExpandoObject.
Вместо этого я мог бы использовать анонимный объект, и это, похоже, работает, но мне гораздо удобнее использовать ExpandoObject.
Нужно ли мне создать свой собственный DynamicObject и позаботиться о нем самостоятельно, внедрив ICustomTypeDescriptor, или я что-то здесь упускаю.
Идеи?
Обновить
Помимо ответа Somedave ниже (согласно комментариям), я добавил этот класс
public class ExpandoObjectTypeDescriptionProvider : TypeDescriptionProvider
{
private static readonly TypeDescriptionProvider m_Default = TypeDescriptor.GetProvider(typeof(ExpandoObject));
public ExpandoObjectTypeDescriptionProvider()
:base(m_Default)
{
}
public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance)
{
var defaultDescriptor = base.GetTypeDescriptor(objectType, instance);
return instance == null ? defaultDescriptor :
new ExpandoObjectTypeDescriptor(instance);
}
}
и зарегистрировал его так:
dynamic parameters = new ExpandoObject();
TypeDescriptor.AddProvider(new ExpandoObjectTypeDescriptionProvider(), parameters);