上一篇文章《C#实现动态属性》讲述了在代码层面模拟动态属性,实现后发现根本不能满足动态加载导入的Excel中不固定列数的需求,也给大家留了个疑问。那么今天用更简单的方法来实现,从而满足昨天那个需求。直接上代码
static void Main(string[] args)
{
List<dynamic> dynamics = new List<dynamic>();
dynamic obj = new ExpandoObject();
((IDictionary<string, object>)obj).Add("Name", "张三");
((IDictionary<string, object>)obj).Add("Age", "22");
((IDictionary<string, object>)obj).Add("Sex", "男");
// Console.WriteLine(obj.Name); 这个地方不行,必须放到集合里
dynamic obj2 = new ExpandoObject();
((IDictionary<string, object>)obj2).Add("Name", "李四");
((IDictionary<string, object>)obj2).Add("Age", "21");
((IDictionary<string, object>)obj2).Add("Sex", "女");
dynamics.Add(obj);
dynamics.Add(obj2);
foreach (var item in dynamics)
{
Console.WriteLine(item.Name);
}
//这里可以转换成json输出
string paramsText = JsonConvert.SerializeObject(dynamics);
}
//输出结果:张三,李四
本实例也是使用了dynamic 特性的ExpandoObject 类。ExpandoObject类的微软官方介绍为:表示可在运行时动态添加和删除其成员的对象。ExpandoObject 类实现 IDictionary<String, Object> 接口。这样,就可以在运行时向类实例 ExpandoObject 添加成员的枚举。如果在编译时不知道实例可能具有的成员。本例就是使用这个原理。但是没有转为集合时不能像属性那样使用,必须添加到dynamic的list集合中才能像属性那样使用。
这个方法完全满足昨天的需求,读取的数据可以通过Excle列的个数循环动态添加属性和属性值。这样的话就可以序列化输出到前端使用。
结语
本文讲述了C#实现动态属性的第二种方式,根据输入字段进行属性动态化。希望本文对你有所收获,同时欢迎留言和提出异议。
参考:微软文档
版权声明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。
技术群:添加小编微信并备注进群
小编微信:mm1552923 公众号:dotNet编程大全