Mam obiekt ExpandoObject, który wysyłam do metody zewnętrznej biblioteki, która pobiera obiekt. Z tego, co widziałem, ta zewnętrzna lib używa wewnętrznie TypeDescriptor.GetProperties i to wydaje się powodować pewne problemy z moim ExpandoObject.Eksponowanie właściwości obiektu ExpandoObject
Mogę zamiast tego użyć anonimowego obiektu, który wydaje się działać, ale znacznie wygodniej jest używać ExpandoObject.
Czy muszę zbudować własny DynamicObject i zająć się nim osobiście, wdrażając ICustomTypeDescriptor lub coś tu brakuje.
Pomysły?
Aktualizacja
Poza Odpowiedź somedave poniżej (zgodnie z uwagami), dodałem tej klasy
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);
}
}
i zarejestrował to tak:
dynamic parameters = new ExpandoObject();
TypeDescriptor.AddProvider(new ExpandoObjectTypeDescriptionProvider(), parameters);
Czy masz na końcu listę nazw nieruchomości? –
nie przed czasem (czas kompilacji) ... stąd ExpandoObject –