Ho un ExpandoObject che sto inviando a un metodo di libreria esterno che accetta un oggetto. Da quello che ho visto questa lib esterna usa TypeDescriptor.GetProperties internamente e questo sembra causare alcuni problemi con il mio ExpandoObject.Esposizione delle proprietà di un ExpandoObject
Potrei andare con un oggetto anonimo e invece sembra funzionare ma per me è molto più comodo usare ExpandoObject.
Ho bisogno di costruire il mio oggetto DynamicObject e di prendermi cura personalmente implementando ICustomTypeDescriptor o mi manca qualcosa qui.
Idee?
Aggiornamento
Oltre alla risposta da somedave di seguito (come per i commenti), ho aggiunto questa classe
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);
}
}
e registrato in questo modo:
dynamic parameters = new ExpandoObject();
TypeDescriptor.AddProvider(new ExpandoObjectTypeDescriptionProvider(), parameters);
Avete un elenco dei nomi di proprietà sulla vostra estremità? –
non in anticipo (tempo di compilazione) ... da qui l'ExpandoObject –