C# JSON格式数据高级用法
json简介
json(全称为javascript objectnotation) 是一种轻量级的数据交换格式。它是基于javascript语法标准的一个子集。json采用完全独立于语言的文本格式,可以很容易在各种网络、平台和程序之间传输。json的语法很简单,易于人阅读和编写,同时也易于机器解析和生成。
json与xml的比较
◆可读性
json和xml的可读性相比较而言,由于xml提供辅助的标签,更加适合人阅读和理解。
◆文件大小与传输
xml允许使用方便的标签,所以文件尺寸是要比json大的。而且json源于javascript,所以天生的主战场是javascript与网络,在这里,json有着xml无法赶超的优势。
json语法
1. json 语法是 javascript 对象表示法语法的子集。
数据在名称/值对中:名称是字符串,使用双引号表示。值可以是:数字(整数或浮点数),字符串(在双引号中),数组(在方括号中),对象(在花括号中),true/false/null。
数据由逗号分隔:
花括号保存对象:对象可以包含各种数据,包括数组。
方括号保存数组:数字可以包含对象。
在做开发的时候,很多数据都是以json格式传输的,而使用json的时候,我们通常会涉及到几个序列化对象的使用:
system.runtime.serialization.json.datacontractjsonserializer
system.web.script.serialization.javascriptserializer
json.net即newtonsoft.json
由于json.net的性能及通用性较好,因此它的使用范围越来越广,借助前人的经验今天我也总结使用一下。
官网api:http://www.newtonsoft.com/json/help/html/n_newtonsoft_json.htm
开源的类库newtonsoft.json(下载地址)
基本用法
json.net是支持序列化和反序列化datatable、dataset、entity framework和entity的
private void newtonsoft() { datatable dt = new datatable(); dt.columns.add("name", type.gettype("system.string")); dt.columns.add("sex", type.gettype("system.string")); dt.columns.add("age", type.gettype("system.int32")); dt.columns.add("phonenumber", type.gettype("system.string")); for (int i = 0; i < 3; i++) { datarow dr = dt.newrow(); dr["name"] = "name" + i; dr["sex"] = i % 2 == 0 ? "女" : "男"; dr["age"] = 18 + i; dr["phonenumber"] = "18233388888"; dt.rows.add(dr); } /*序列化datatable*/ string json = jsonconvert.serializeobject(dt); /*反序列化datatable*/ datatable dtsource = jsonconvert.deserializeobject<datatable>(json); foreach (datarow item in dtsource.rows) { string name = item["name"].tostring(); string sex = item["sex"].tostring(); int age = int.parse(item["age"].tostring()); string phonenumber = item["phonenumber"].tostring(); } }
serialize json 格式转换
product product = new product(); product.name = "apple"; product.expiry = new datetime(2008, 12, 28); product.sizes = new string[] { "small" }; string json = jsonconvert.serializeobject(product); // { // "name": "apple", // "expiry": "2008-12-28t00:00:00", // "sizes": [ // "small" // ] // }
deserialize json 格式转换
string json = @"{ 'name': 'bad boys', 'releasedate': '1995-4-7t00:00:00', 'genres': [ 'action', 'comedy' ] }"; movie m = jsonconvert.deserializeobject<movie>(json); string name = m.name; // bad boys
linq to json 格式转换
jarray array = new jarray(); array.add("manual text"); array.add(new datetime(2000, 5, 23)); jobject o = new jobject(); o["myarray"] = array; string json = o.tostring(); // { // "myarray": [ // "manual text", // "2000-05-23t00:00:00" // ] // }
上一篇: curl模拟http请求