|
平时为了方便 都是序列化json整个类来记录用户的设置 ,很多情况 ,在系统中难免会以inteface 来实现插件机制,这样同步插件设置就有点困难了, 因为拿到的json 无法序列化接口...你也无从知道dll 中实现接口的是哪个类..怎么办?
第一步:先获取dll中实现了 接口的类, 然后序列化成json 文本...保存到数据库,这里当成一个设置类
第二步: 用户重新打开软件,需要将用户的设置项还源回去... 可以获得接口的Type 然后序列化回去,返回 接口对像,其实说起来很饶,,还是贴代码吧
封装的方法
- <img src="http://bbs.125.la/forum.php?mod=image&aid=634764&size=300x300&key=e476e3c2288e8862&nocache=yes&type=fixnone" border="0" aid="attachimg_634764" alt="" style="line-height: 1.5;">
复制代码
调用
var port = Tu_System.GetDllInterface<Lottery.Mode.Interface.IPlan>(dllPath).First(); //我这句代码的意思是获得 dllPath 中的接口对像实例
string conf = port.JsonSerialize(); //这里直接将port 序列化成json 文本,拿到这后..就可以去存数据库..或放本地..什么的就是要达到用户保存配置的需求
关键的一句就在这里
var obj = conf.JsonParse<Lottery.Mode.Interface.IPlan>(port.GetType());
最后拿到的obj 是序列化接口拿到的
总结:
通过以上例子..可以猜出 .net在进行拆箱装箱的时候 ...其实还是引用了地址的..做为小白的我还以直以为经过拆装箱.就完全是另一个对像了, 所以执行port.GetType 的时候 ..拿到的实际上就是dllPath 中实现接口的哪个类的Type 所以 能完整的附值
在这行业里摸这么多年,没有感谢帮过我的前辈,
本人原创,复制请注明作者QQ:825861522
|
|