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. 控制台手动编译Qt5程序

    转自:http://www.cnblogs.com/csulennon/p/4479236.html 在上一篇随笔中已经搭建好了Qt5的的开发环境,并且通过Qt Creator自动构建了一个视窗程序. ...

  2. tcp状态机

    tcp共有11种状态,其中涉及到关闭的状态有5 个.这5 个状态相互关联,相互纠缠,而且状态变化触发都是由应用触发,但是又涉及操作系统和网络,所以正确的理解TCP 在关闭时网络状态变化情况,为我们诊断 ...

  3. servlet(1)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  4. Android系统启动过程

    首先Android框架架构图: Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用. 启动的过程如下图所示:(图片来自网上,后面有地址)   下面将从And ...

  5. TabLayout和ViewPager联动时的问题及解决方案

    问题概述 TabLayout搭配ViewPager关联使用时,在未调用TabLayout的setupWithViewPager(mViewPager)方法之前,ViewPager的内容和TabLayo ...

  6. 黑马----JAVA泛型基础

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 JAVA范型-基础 一.泛型的概念 1.实现了参数化类型 2.用于编写可应用于多种类型的代码,即所编写的代码可应用于许多许多的类 ...

  7. 【转】浅思OC的语言特性

    算了算,学习IOS已经有一段时间了.今天花了点时间思考一下OC的语言特性,让自己的心不要那么浮躁,注重基础,回归本源. OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装.继承.多态.他具有 ...

  8. Linux系统启动错误 contains a file system with errors, check forced解决方法

    /dev/sda1 contains a file system with errors, check forced./dev/sda1: Inodes that were part of a cor ...

  9. wampserver 403 禁止访问

    解决方法:修改Apache配置文件httpd.conf,注释掉 deny from all:将Allow from 127.0.0.1改为Allow from all

  10. 深入理解javascript中实现面向对象编程方法

    介绍Javascript中面向对象编程思想之前,需要对以下几个概念有了解: 1. 浅拷贝和深拷贝:程序在运行过程中使用的变量有在栈上的变量和在堆上的变量,在对象或者变量的赋值操作过程中,大多数情况先是 ...