首先,为了让事情更清楚,我将从头开始解释我的场景:
我有一个方法,它有以下签名:
public virtual void SendEmail(String from, List<String> recepients, Object model)
我想要做的是生成一个匿名对象,它具有模型对象的属性以及前两个参数。将模型对象扁平化为PropertyInfo[]非常简单。因此,我想到创建一个Dictionary,它将保存PropertyInfo和前两个参数。然后被转换成匿名对象,其中key是属性的名称,value是属性的实际值。
有可能吗?还有别的建议吗?
8条答案
按热度按时间czfnxgou1#
如果您确实想将字典转换为一个将字典的项作为属性的对象,则可以使用
ExpandoObject
:guz6ccqo2#
我试着用reduce函数(Linq中的Aggregate)在一条语句中实现这个功能,下面的代码与公认的答案相同:
oxalkeyp3#
如果您要将
Dictionary<string, object>
转换为匿名System.Object
,可以使用此方法:像这样:
以获取对象。其中
AnonymousType
类代码为:参考:https://stackoverflow.com/a/29428640/2073920
waxmsbnn4#
如果您有一个类也想转换字典,您可以使用以下代码将字典转换为该类的对象:
示例类:
解决方案:
你也可以使用这样的方法从字典中构建对象,显然这也需要你有一个类。
但是,如果您没有类,则可以从字典创建动态对象,如下所示:
您可以像这样使用它:
gxwragnw5#
这是svick答案的一个稍微模块化的版本,使用了一些扩展方法:
j8ag8udp6#
匿名对象是编译器为你生成的对象。你不能动态地创建一个。另一方面你可以发出这样的对象,但我真的不认为这是个好主意。
也许你可以尝试动态对象?结果将是一个具有所有属性的对象。
vaj7vani7#
这里的功劳归于公认的答案。添加这个是因为我想把一个List〈Dictionary〈string,object〉〉转换成一个List< dynamic>。目的是从数据库表中提取记录。下面是我所做的。
bxgwgixi8#
下面的代码处理子字典,并将它们转换为嵌套的动态对象:
这种方法允许只通过访问动态对象本身来访问嵌套字典的内容: