Json格式在用于数据存储方面比xml有着空间上的优势,Json格式又主要分为两种格式:名称/值 对 和数组。

在我的业务环境中需要先把一种空间比较小的格式。

测试如下:

取数据库中的一张表然后生成两种格式的Json文件进行对比。

生成名称/值 对的格式,样式如下:

大小为:6460KB

生成数组的格式,样式如下:

大小为:2736KB。

数组由于列的信息只显示一次,大小约为原来的50%。

生成两种格式的C#代码如下:

    static void Main(string[] args)
{
DataTable dt = DataAccess.GetData("select * from stk_code"); string sJson= JsonConvert.SerializeObject(dt);
FileStream fs = new FileStream("D:\\Json.txt", FileMode.Append);
StreamWriter sw = new StreamWriter(fs, Encoding.Default);
sw.WriteLine(sJson);
sw.Close();
fs.Close(); Dictionary<string, List<object>> dataList = DataToList.DataTableToList(dt);
sJson = JsonConvert.SerializeObject(dataList);
fs = new FileStream("D:\\Json2.txt", FileMode.Append);
sw = new StreamWriter(fs, Encoding.Default);
sw.WriteLine(sJson);
sw.Close();
fs.Close(); Console.ReadKey();
}

将Datatable转为Dictionary 的方法如下:

  public class DataToList
{
/// <summary>
/// 将datarow 转化为Dictionary<string, List<object>>
/// 结果集中第一行为列名,第二行开始为数据,数据行用数字0-N表示
/// </summary>
/// <param name="table"></param>
/// <returns></returns>
public static Dictionary<string, List<object>> DataTableToList(DataTable table)
{
Dictionary<string, List<object>> DataList = new Dictionary<string, List<object>>(); List<object> itemValue = new List<object>();
string itemKey = "col"; foreach (DataColumn dc in table.Columns)
{
itemValue.Add(dc.ColumnName);
}
DataList.Add(itemKey, itemValue); int i = ;
foreach (DataRow dr in table.Rows)
{
itemKey = i.ToString();
itemValue = new List<object>(); foreach (var val in dr.ItemArray)
{
itemValue.Add(val);
}
DataList.Add(itemKey, itemValue);
i++;
} return DataList;
} }

//写流文件
ObjectStream.Serialize<Dictionary<string, List<object>>>(dataList, @"D:\stream.bin");


//读流文件
Dictionary<string, List<object>> ndt = (Dictionary<string, List<object>>)ObjectStream.Deserialize(@"D:\stream.bin");

 

数组的格式虽然占用的空间会小一些,但需要进行一次转换,所以在选择的时候需要视具体情况而定。

主要有两方面的因素:

1.列名和内容的比例大小关系,如果大部分字段是文本类的,大小的区别应该不大。采用数组反而多一次转换。

2.是带宽为稀缺资源还是CPU为稀缺资源?

第三种方案,将数据对象直接存储为流:

如这个对象是DataTable则大小为:10368KB。如采用简单一点的对象如

Dictionary<string,List<object>>则大小为:3225

所以大小取决于对象的简单程度。

对象和流之间的转换代码:

  public class ObjectStream
{
/// <summary>
/// 将一个对象转换为流文件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <param name="filename"></param>
/// <returns></returns>
public static bool Serialize<T>(T value, string filename)
{
try
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bs = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.FileStream stream = new System.IO.FileStream(filename, System.IO.FileMode.Create);
bs.Serialize(stream, value);
stream.Close();
return true;
}
catch
{
return false;
}
} /// <summary>
/// 从流文件中获取一个对象
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static Object Deserialize(string fileName)
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bs = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.FileStream stream = new System.IO.FileStream(fileName, System.IO.FileMode.Open);
return bs.Deserialize(stream);
}
}

Json格式应用的更多相关文章

  1. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

  2. WebApi返回Json格式字符串

    WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉都不怎么好. 先贴一下, 网上给的常用方法吧. 方法一:(改配置法) 找到Global.asax文件,在 ...

  3. 【.net 深呼吸】聊聊WCF服务返回XML或JSON格式数据

    有时候,为了让数据可以“跨国经营”,尤其是HTTP Web有关的东东,会将数据内容以 XML 或 JSON 的格式返回,这样一来,不管客户端平台是四大文明古国,还是处于蒙昧时代的原始部落,都可以使用这 ...

  4. asp.net dataTable转换成Json格式

    /// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...

  5. plist文件、NSUserDefault 对文件进行存储的类、json格式解析

    ========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...

  6. ajax提交数据到java后台,并且返回json格式数据前台接收处理值

    1.前台html页面.有一段代码如下: 账  户:  <input type="text" name="userName" id="userN& ...

  7. Struts2返回json格式数据踩坑记录

    事件起因 昨天提测修改冻结/解冻银行卡样式的功能,微姐测试过程中发现调用ajax请求耗时过长,今天来排查,发现浏览器请求/finance/ajax/freeze/ajaxGetShopLists时,对 ...

  8. JSON格式序列化与反序列化(List、XML)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  9. json相关,浏览器打开json格式的api接口时,进行格式化,chrome插件

    在chrome浏览器中安装Google jsonview插件能够自动格式化json格式的数据.

  10. WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)

    DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...

随机推荐

  1. mvc 导出excel

    #region 导出new方法 [NonAction] protected string RenderViewToString(Controller controller, string viewNa ...

  2. C语言实现粒子群算法(PSO)一

    最近在温习C语言,看的书是<C primer Plus>,忽然想起来以前在参加数学建模的时候,用过的一些智能算法,比如遗传算法.粒子群算法.蚁群算法等等.当时是使用MATLAB来实现的,而 ...

  3. Python学习路程day15

    Python之路[第十五篇]:Web框架 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/en ...

  4. C++11 auto_ptr 的问题

    auto_ptr作为最早的智能指针,可以实现以RAII手法管理堆区对象,但它设计的本意只是简单的利用C++对于栈区对象的自动析构管理堆区对象, 并不像shared_ptr那样包含引用计数,可以在每次拷 ...

  5. JMS links

    http://yuxisanren.iteye.com/blog/1912587 http://somebody-hjh.iteye.com/blog/726050 http://docs.oracl ...

  6. Drools环境搭建(转)

    Eclipse3.5安装Drools5.2.0.Final插件 到Drools下载页面(现在是http://www.jboss.org/drools/downloads.html) -下载并解压Dro ...

  7. 极路由访问Apple Store可以浏览但是不能下载的解决方案

    最近在家里上网突然发现Apple Store不能更新了.重启路由器发现最开始一会是能下载更新的,但是过了一会就完全不能下载更新了.很是奇怪,今天特意分析了一下这个问题. 首先,抓包确定Apple St ...

  8. PC端和手机访问调用不同的页面,JS和PHP不同方法

    js方法: var urlqr = location.href;    urlqr = urlqr.replace(/iphoneF_/, "pc")这里写正则替换页面地址 if( ...

  9. webclient的简单实用

    这是我在项目中调用别人写好的接口口是使用的1.简单的url传参 List<ArticleModel> result = new List<ArticleModel>(); st ...

  10. css中font-size的单位总结:px、em、pt

    px:基于像素的单位.像素是一种有用的单位,因为在任何媒体上都可以保证一个像素的差别确实是可见的.em :一般用来测量长度的通用单位(例如元素周转的页边空白和填充),当用于指定字体大小时,em单位是指 ...