今天在实验当中发现了很不错的节省json流量方式,来做个笔记给大家分享一下。
如果跟服务器传递键值对的数组,我们一般会采用下面方式
创建一个字段
public class kv
{
public string key { get; set; };
public string value { get; set; };
}
实例化li
List<kv> li = new List<kv>();
添加参数
li.add(new li{key="cn",value="china"});
li.add(new li{ key="mn", value="mongol"});
让后转换成json
using System.Web.Script.Serialization;命名空间
JavaScriptSerializer jss=new JavaScriptSerializer();实例化。JavaScriptSerializer()下有Serializer方法,它是把object序列化成json字符串。
String json=jss.Serialize(li);
Json的值"[{"key":"cn","value":"china"},{"key":"mn","value":"mongol"}]",json.lenght长度60。
Js: var a=JSON.parse(json);
for (var i = 0; i < a.lenght; i++) {
alert(a[i].k+":"+a[i].v);
}
但发现json字符串里的""value""和""value""很多余!希望是"["cn":"china","mn":"mongol"]", json.lenght长度28。
下面实现该方法:
因为Serializer方法接受object,我们可以把Dictionary转换成json。
Dictionary<string,string> dic = new Dictionary<string,string>();//实例化Dictionary键值对
添加参数
dic.add("cn","china");
dic.add("mn","mongol");
JavaScriptSerializer jss = new JavaScriptSerializer();
String json=jss.Serialize(dic);
Json的值"["cn":"china","mn":"mongol"]"
Js: var a=JSON.parse(json); //序列化
for(k in a){ //js中for相当于foreach,注意:他会遍历出key的值
alert(k+":"+a[k]); //根据已知的key找出对应的value
}
对本例子节约了50%的流量哦。