c# - 添加自定义属性并从动态对象获取属性
问题描述
我有这种情况,我们使用模型类来生成一个 excel 文件,但是由于新的请求,它需要处理包含 excel 文件代码生成器必须处理的属性的动态对象。
因此,如果我有模型,假设用户:
[Sheet]
public class User
{
[Column]
public string FirstName { get; set; }
[Column]
public string LastName { get; set; }
[Column]
public string EmailAddress { get; set; }
}
因此,如果用户不想包含该字段,则在导出引擎尝试将属性名称及其值处理到 excelEmailAddress
时应将其排除。model.GetType().GetProperties()
我尝试使用,ExpandoObject
但是当我尝试访问属性时它不起作用,model.GetType().GetProperties()
即使我已将整体传递PropertyInfo
给IDictionary<string, object>
值。
我如何使用动态来做到这一点?仅供参考,自定义属性被导入作为对象的一部分,它是属性,因为使用这些属性进行过滤以进一步处理模型类。
更新
这个对象是通用IList
的,例如它可以是IList<User>
因为它是数据导出到 excel。
解决方案
我相信您在问如何从 ExpandoObject 检索所有“属性”(动态成员)。您所要做的就是迭代它。
public static void Main()
{
dynamic d = new ExpandoObject();
d.Foo = "Hello";
Console.WriteLine("Should have one property:");
foreach (var i in d )
{
Console.WriteLine("Name: {0} Type: {1} Value: {2}", i.Key, i.Value.GetType().Name, i.Value);
}
Console.WriteLine("\r\nShould have two properties:");
d.Bar = 123.45F;
foreach (var i in d)
{
Console.WriteLine("Name: {0} Type: {1} Value: {2}", i.Key, i.Value.GetType().Name, i.Value);
}
}
输出:
Should have one property:
Name: Foo Type: String Value: Hello
Should have two properties:
Name: Foo Type: String Value: Hello
Name: Bar Type: Single Value: 123.45
请参阅我在DotNetFiddle上的示例。
推荐阅读
- java - 在单击按钮时隐藏鼠标光标
- html - How to make a scrollable footer appear over a fixed content?
- .net - How to register Office Web Add-in in the Microsoft App Registration Portal
- python - PyTest 设置或拆卸变量
- extjs - Sencha ExtJS 自动设置唯一 ID
- reactjs - how to add time picker using react materialize?
- regex - Get String between 2 Strings or delimeters in bash using regex
- android - 列表视图中重叠的文本视图
- javascript - 从 url 获取值而不是使用 javascript 选择复选框
- jquery - 从另一个页面引导模态内容