从TabletoList到Xml、Json序列化
来源:互联网 发布:ubuntu 文件权限设置 编辑:程序博客网 时间:2024/05/21 06:16
在日常的使用中,经常需要持久化数据,那么数据来源纷繁多样,有可能来自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的序列化、反序列化操作。说到底,还是为了关系映射。
- 从TabletoList到Xml、Json序列化
- 使用XStream将对象序列化到XML以及从XML反序列化到对象
- 序列化格式:XML、JSON、YAML
- XML序列化对象到字符串,从字符串反序列化
- xml文件的序列化(信息从内存写到文件里)存贮文件
- VB.NET 从XML文件中读取内容到JSON
- 序列化 | 反序列化 | Json xml 二进制序列化
- XStream 序列化对象到JSON
- 从文件序列化出对象(使用xml序列化)
- 图像文件序列化到XML文件中
- 序列化Dictionary属性到XML里
- C# 序列化xml数据到class
- 序列化对象为xml,从xml反序列化
- 从json到gson
- 简述Xml.Serialization如何序列化对象到XML文件
- xml序列化到本地以及使用Pull解析xml
- XML/JSON序列化和反序列化
- C# 二进制、Xml、Json序列化和反序列化
- 打开VS2008提示 VMDebuger failed to load的解决办法
- 小浩教你学操作系统
- 线段树专题
- C Tricks(十八)—— 整数绝对值的实现
- phpstorm 2016.2.1 添加php手册详解
- 从TabletoList到Xml、Json序列化
- Python爬虫urllib2笔记(五)数据传送设置HeadersURLError
- 学习工具的使用
- 194. Transpose File
- 学习mysql的第三天
- 总结
- C++ auto 用法
- mysql 正则表达式
- hdu1233 - 还是通畅工程(最小生成树)