【发布时间】:2013-05-15 14:06:20
【问题描述】:
我有一个 ExpandoObject 我要发送到一个外部库方法,该方法需要一个对象。据我所知,这个外部库在内部使用 TypeDescriptor.GetProperties,这似乎会导致我的 ExpandoObject 出现一些问题。
我可以使用匿名对象,这似乎可行,但使用 ExpandoObject 对我来说更方便。
我是否需要构建自己的 DynamicObject 并通过实现 ICustomTypeDescriptor 自己处理它,还是我在这里遗漏了什么。
想法?
更新
除了下面 somedave 的答案(根据 cmets),我添加了这个类
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);
【问题讨论】:
-
你有房产名列表吗?
-
不提前(编译时间)...因此是 ExpandoObject
标签: c# .net dynamic expandoobject