加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

从TabletoList到Xml、Json序列化

发布时间:2020-12-16 02:16:27 所属栏目:百科 来源:网络整理
导读:在日常的使用中,经常需要持久化数据,那么数据来源纷繁多样,有可能来自SQL的,有可能来自文件的,有可能是来自XML或者JSON格式的(通常这类是从网上获得的),那么真的每次都要一点一点写么? 答案当然是否定的。 单单从SQL方面来讲,无论是熟悉的Hibernat

在日常的使用中,经常需要持久化数据,那么数据来源纷繁多样,有可能来自SQL的,有可能来自文件的,有可能是来自XML或者JSON格式的(通常这类是从网上获得的),那么真的每次都要一点一点写么?

答案当然是否定的。

单单从SQL方面来讲,无论是熟悉的Hibernate还是流行的Mybatis,都是非常好的SQL_ORM框架。可是如果只是一个很小型的项目,需要这么大动干戈的使用这种吗?比如只是用来做一些小玩意。如果你不用这种,也不想自己写,那么你就需要两个小类就可以完成,一个是数据库帮助类,帮你完成数据库的连接和操作,另一个就是从内存数据库中映射到实体类的数据转换类。

那么提到映射这个概念,就需要了解它的原理。

首先你需要准备的一个是数据源,另一个是你的实体类,有的叫做model,有的叫做Entity,还有的叫做Domain,实际上都是一个只包含数据结构的实体类。在C#中,它使用的是Attribute和反射机制相互结合,就造就了可以自动映射的奇迹。具体步骤如下:

1、首先它先利用反射机制获取模型里的所有成员

2、然后遍历成员,如果成员是其属性,就再获取其attribute。

3、在Atrribute中获取到所定义的DataFieldAttribute。

4、然后利用属性名从表中取出相应的列,赋值给相应的属性。

有关这个工程,在我的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的序列化、反序列化操作。说到底,还是为了关系映射。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读