ASP.NET中实现把Json数据转换为ADO.NET DataSet对象
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.正则表达式 如果在你的代码中需要高频率地反复调用这两种操作,那么你就需要考虑性能问题。尤其是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 http://restcountries.eu/rest/v1/all 好了,现在我开发了一个非常简单的插件,可以通过GET命令,从RESTful API导入数据到TIBCO Spotfire中: 导入数据后,我可以立刻分析出哪个国家人口比重最大,哪个国家与其接壤的国家数量最多: 看,我国不仅人口最多(占世界人口的19%),而且与我国接壤的国家数量最多(15个)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.net – 多个上传与jQuery多文件上传插件
- 通过WCF扩展实现消息压缩
- asp.net – 将日期字符串转换为DateTime格式vb.net
- asp.net-mvc – IdentityServer MVC令牌过期
- asp.net – 在.net应用程序中使用jquery禁用回发上的按钮
- 在我的应用程序中托管ASP.NET
- 每个“HttpRequest”在ASP.NET中都有自己的线程吗?
- asp.net-core – 使用ASP.NET Core创建cookie
- ninject – 为从ASP.NET MVC和工作者应用程序使用RabbitMQ设
- asp.net-core – 在Asp.Net Core中注入DbContext.具体类型还
- asp.net-core – 程序集中找不到入口点’Microso
- 有没有办法以编程方式设置ASP.NET Universal Pro
- asp.net – 脚本控件不是注册的脚本控件
- asp.net – web.config文件中的特殊字符
- asp.net-mvc – 什么是上下文?
- 一步一步创建ASP.NET MVC5程序[Repository+Autof
- “DataSource和DataSourceID都被定义为”使用ASP
- asp.net-mvc – 使用实体框架的没有存储库模式的
- asp.net-mvc – MetadataTypeAttribute在DNX Cor
- asp.net-mvc – 使用UIHint的ASP.NET MVC 3自定义