在这种情况下,我们使用模型类来生成excel文件,但是由于新的请求,它需要处理动态对象,该对象包括excel文件代码生成器必须处理的属性。
因此,如果我有模型,可以说用户:
public static void main(String[] args) {
DoublyLinkedList<Integer> list = new DoublyLinkedList<>();
list.add(1);
list.add(2);
list.add(3);
System.out.println(list.toString()); // [1, 2, 3]
}
因此,如果用户不想包括[Sheet]
public class User
{
[Column]
public string FirstName { get; set; }
[Column]
public string LastName { get; set; }
[Column]
public string EmailAddress { get; set; }
}
字段,则在导出引擎尝试执行EmailAddress
来处理属性名称及其对excel的值时,应排除此字段。
我尝试使用model.GetType().GetProperties()
,但是当我尝试通过ExpandoObject
访问属性时,即使我已经将整个model.GetType().GetProperties()
传递给PropertyInfo
,也无法使用值。
如何使用动态功能?仅供参考,自定义属性将被导入以包含在对象及其属性中,因为存在使用这些属性进行过滤以进一步处理模型类的情况。
更新
此对象是通用的IDictionary<string, object>
,例如,可以将其IList
导出到excel。
答案 0 :(得分:0)
我相信您正在问如何从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上查看我的示例。