当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET中实现把Json数据转换为ADO.NET DataSet对象

ASP.NET中实现把Json数据转换为ADO.NET DataSet对象

2017年12月12日  | 移动技术网IT编程  | 我要评论
json数据转换为ado.net dataset其实方法有很多,newtonsoft.json也提供了dataset的converter用以转换json数据。但是有些情况下

json数据转换为ado.net dataset其实方法有很多,newtonsoft.json也提供了dataset的converter用以转换json数据。但是有些情况下dataset converter并不管用,而且也不一定能够满足项目需要。这里介绍另一种简单有效的方法,能够方便快速地将json数据转为ado.net dataset。

设计

事实上newtonsoft.json已经提供了一套完整的json数据文档结构,newtonsoft.json.linq命名空间下提供了这种文档结构的对象模型,因此我们可以借用这样的模型,在其上应用访问者(visitor,gof95)模式,对树状结构的对象模型进行遍历,以达到ado.net datatable、datarelation的创建以及dataset的生成。基本对象模型如下:

其实实现起来还是非常简单的,我已经把完整的项目和单元测试开源到github上。具体的代码可以参考https://github.com/daxnet/json2dataset开源项目。

性能

性能方面,在实现的过程中,我发现有两个地方是性能瓶颈:

1.正则表达式
2.jtoken.path属性

如果在你的代码中需要高频率地反复调用这两种操作,那么你就需要考虑性能问题。尤其是jtoken.path属性,它的内部实现牵涉到链表数据结构、复杂循环等,因此效率不是很高,应该尽量避免使用这一属性(当然我开源的代码中还有一处在调用该属性,可以进一步优化)。

另一方面,对于ado.net datatable和datarelation的构建,性能还是相当高的,无需担心。总体上看,将15mb的json数据转换为dataset仅需4秒左右,有兴趣的朋友还可以在该代码基础上进一步优化。

调用
在该开源项目主页上已经说明了调用方式。很简单:

复制代码 代码如下:

var json = file.readalltext(@"d:\test.json");
var dataset = json2datasetconverter.convert(json);

比如通过调用某个restful api,获得json response以后,直接将返回结果转换为dataset,并在visual studio debug visualizer for dataset中看到某公司的客户信息,以及这些客户所完成的订单数据:

应用

tibco spotfire是一种世界先进的数据分析软件,不仅功能强大,还可以为其定制数据导入插件,方便地将外部数据导入其中进行分析。它是以表的形式对数据进行整合和分析的,因此,它对ado.net dataset的支持是非常好的,能够很方便地将ado.net dataset中所包含的表数据导入。

现有一个restful api,它能够获取全世界所有国家的列表信息,包括国家名称、语言、人口、与该国接壤的国家数量等等。该api的地址是:

复制代码 代码如下:

get

好了,现在我开发了一个非常简单的插件,可以通过get命令,从restful api导入数据到tibco spotfire中:

导入数据后,我可以立刻分析出哪个国家人口比重最大,哪个国家与其接壤的国家数量最多:

看,我国不仅人口最多(占世界人口的19%),而且与我国接壤的国家数量最多(15个)。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网