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. Javascript的函数自调

    嗯 也不知道怎么翻译self-invoked,就当自调吧. 在看bootstrap的轮播插件源码的时候发现一种新的自调函数的写法(其实应该不新了),开头的一段就卡住了,原谅我是个菜鸟,就顺便记录一下. ...

  2. Linux内核分析学习总结

    20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这学期开 ...

  3. 微软Face API体验——人脸检测

    微软推出了全新REST API,现在可免费获取密钥,大家可以赶快申请!申请地址:https://cn.projectoxford.ai/subscription 看了网站的API介绍,忍不住赶快体验一 ...

  4. Noi2011 阿狸的打字机

    ..] of longint; e,q,fa,ps,pt,fail,ans:..] of longint; trie:..,..] of longint; c:..] of longint; s:.. ...

  5. Windows集成认证全过程

    开发环境:win7旗舰版,vs2013 服务器环境:windows server 2008 R2 IIS7.5 目的:在局域网搭建一个网站,用户必须使用域帐号登录网站访问 Step 1: 创建proj ...

  6. [转]IoC模式

    IoC模式 1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它 ...

  7. div中显示页面

    在css中显示页面,在页面布局中很多时候都要在一个div 里显示某些页面.在这里写下我用到的一种方式. <script type="text/javascript"> ...

  8. 4-Spark高级数据分析-第四章 用决策树算法预测森林植被

    预测是非常困难的,更别提预测未来. 4.1 回归简介 随着现代机器学习和数据科学的出现,我们依旧把从“某些值”预测“另外某个值”的思想称为回归.回归是预测一个数值型数量,比如大小.收入和温度,而分类则 ...

  9. 获取url的html值

    //取当前页面的地址 例如http:127.0.0.1:80/aaa/index.html 返回http:127.0.0.1:80/aaa/function getUrlAddr(){ var str ...

  10. pyodbc不支持使用%,应该使用?

    pyodbc不支持使用%,应该使用? 如: Sql插入语句cur.execute("INSERT INTO bb VALUES (?,?,?)","s",&qu ...