今天遇到一个需要动态抓取某个网站的内容,需要逐页保存。 网站页面的接口是不同的Json格式,不同的Json需要转换成自己的类,并为每个类实现方法。 以及数据提取,实现方法是将转换后的类名写入到配置文件中,通过配置文件动态调用类。 有一个问题,读取的配置文件是一个字符串,如何将其转换为类对象?
实现方法可以通过反射来实现,代码如下:
//循环读取配置文件的类名,这里Test是从配置文件里读取的
Type t = Type.GetType("Test");
//创建实例对象
var obj = t.Assembly.CreateInstance("Test");
//动态从网站抓取出的json,模拟过程,这里就不列出具体代码了
var json= "{test:\"hidotnet开发跳槽\"}";
//获取方法
MethodInfo method = t.GetMethod("TestFun");
//调用方法
method.Invoke(obj, new object[] {json});
//测试的类型
class Test
{ //处理Json的方法
public void TestFun(string name)
{
Console.WriteLine("要处理的Json:" + name);
}
}
以上实现了动态读取类通过反射来处理数据,不需要用于分支判断,从而避免了代码重复和臃肿。 如果您还有其他好的方法,欢迎留言讨论。