字典<string,object =“”>到强类型对象

时间:2019-05-21 20:18:44

标签: c# .net .net-core

我需要一种将Dictionary转换为强类型对象的方法。 我知道我可以使用反射并简单地创建一个我想要的类型的新对象,然后遍历属性并分配它们。 https://dotnetfiddle.net/yz9GPd

但是..在我看来,这是效率极低的..那么,有什么好的方法可以改善此问题吗?..还有一种使用较少反射的方法(因为那通常成本很高)。 也许可以通过某种方式使用编译表达式/函数来做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用FastMember之类的东西,该东西正在使用Reflection.Emit映射到您的类成员,并将其名称作为字符串。与标准反射相比,它速度很快,但是如果您自己进行编写,则很难编写。

使用该库,您的示例如下所示:

Dictionary<string, object> values = new Dictionary<string, object>()
{
    { "Property1", "MyValue" },
    { "Property2", 1234 },
    { "Property3", true },
};

MyType myType = new MyType();
var accessor = TypeAccessor.Create(typeof(MyType));
foreach (var entry in values)
    accessor[myType, entry.Key] = entry.Value;