在日常的使用中,经常需要持久化数据,那么数据来源纷繁多样,有可能来自sql的,有可能来自文件的,有可能是来自XML或者JSON格式的(通常这类是从网上获得的),那么真的每次都要一点一点写么?
答案当然是否定的。
单单从sql方面来讲,无论是熟悉的Hibernate还是流行的Mybatis,都是非常好的sql_ORM框架。可是如果只是一个很小型的项目,需要这么大动干戈的使用这种吗?比如只是用来做一些小玩意。如果你不用这种,也不想自己写,那么你就需要两个小类就可以完成,一个是数据库帮助类,帮你完成数据库的连接和操作,另一个就是从内存数据库中映射到实体类的数据转换类。
那么提到映射这个概念,就需要了解它的原理。
首先你需要准备的一个是数据源,另一个是你的实体类,有的叫做model,有的叫做Entity,还有的叫做Domain,实际上都是一个只包含数据结构的实体类。在C#中,它使用的是Attribute和反射机制相互结合,就造就了可以自动映射的奇迹。具体步骤如下:
1、首先它先利用反射机制获取模型里的所有成员
2、然后遍历成员,如果成员是其属性,就再获取其attribute。
3、在Atrribute中获取到所定义的DataFieldAttribute。
有关这个工程,在我的Github上面https://github.com/liuxuan320/Lightsql提供了C#版本的,里面还附带了一个文件操作类。大家可以自行下载修正和补充。
其实这种形式在之前就已经出现,它叫做序列化操作,尤其是针对XML和JSON格式的序列化操作。也就是把XML或者JSON格式的数据自动的映射成实体类。
如果是JSON格式的,.Net自带了2个类供大 家使用,一个是JavaScriptSerializer类,但这需要引用web,并且必须要VS2013以上版本使用,也就是.NET4.5以上才行。另外一个是DataContractJsonSerializer,这个也是可以进行序列化的,而且可以处理其中的键类型不是字符串类型的,但是前者的兼容性更好。具体代码我也已经更新到https://github.com/liuxuan320/Lightsql上面了。
当然,如果你问,如果是多级的JSON怎么办?那你的成员也定义成List的就好了。
如果你又问,如果不规则怎么办?把泛型T直接变成obJect的即可。
忘记说了一点,你的模型的属性名要和JSON里键名一致才行。
当然这只是进行序列化和反序列化,如果你还需要更高的要求,比如,我要在原JSON格式上直接进行操作,那我想,你可能需要一个开源库Newtonsoft.Json。下载地址http://json.codeplex.com/.这个除了有原生的序列和反序列化JSON方法,还有直接创建JSON对象,当然它还有其他一些高级用法。不过缺点就是,你需要引入第三方库。
而对于XML来讲,它同样具有序列化和反序列化操作,同样的,我也已经写在工程里了,并且附了注释。当然,对XML的操作还有很多,但是我们这一篇只讨论关系映射、序列化及反序列化。
对于JSON和XML的操作当然有很多,如果要写的话,肯定要单独拿出来一篇来写,本篇文章主要介绍的就是Tabletolist及JSON、XML的序列化、反序列化操作。说到底,还是为了关系映射。
原文链接:https://www.f2er.com/xml/294848.html