我们从Dapper返回的DTO类使用提供有关每个属性(由UI使用)的元数据的属性进行修饰,例如:
public class Person
{
[Metadata("First Name")]
public string FirstName { get; set; }
[Metadata("Last Name")]
public string LastName { get; set; }
}
在某些情况下,从表格返回的对象可能因客户而异。它们通常具有一组“公共”字段,然后是一组自定义字段,例如Person.Foo
。
为方便起见,我们打算使用动态对象(派生自System.Dynamic.DynamicObject
)。
public class DynamicPerson : DynamicDto
{
[Metadata("First Name")]
public string FirstName { get; set; }
[Metadata("Last Name")]
public string LastName { get; set; }
}
我们的想法是,我们可以反映实例属性以获取其元数据,然后使用其他机制来获取动态属性元数据。
当我运行以下测试时:
var query = "select 'Ben' as FirstName, 'Foster' as LastName, 25 as Age";
var people = cn.Query<DynamicPerson>(query);
仅设置了我的实例属性(FirstName和LastName)。如何使Dapper设置实例上不存在的动态属性?