您的位置:首页 > Web前端 > JavaScript

C# - JSON详解

2015-09-01 11:29 639 查看
先要引用json.net命名空间

using Newtonsoft.Json;

using Newtonsoft.Json.Linq;

然后利用JSON.NET的JsonConvert方法把对象序列化为json字符串

 实体类转为json字符串

  List<Corder> corderlists = new List<Corder>();

  Corder corder = new Corder { strCode = "aa", strCustid = "bb", strSaleman = "cc", dtDate = '2015-9-1', decAmt =200};  

corderlists.Add(corder);

  Corder corder = new Corder { strCode = "aaa", strCustid = "bbb", strSaleman = "ccc", dtDate = '2015-9-1', decAmt =3000};  

corderlists.Add(corder);
   string strJson = JsonConvert.SerializeObject(corderlists);

使用LINQ to JSON定制JSON数据

使用JsonConvert对象的SerializeObject只是简单地将一个list或集合转换为json字符串。但是,有的时候我们的前端 框架比如ExtJs对服务端返回的数据格式是有一定要求的,比如下面的数据格式,这时就需要用到JSON.NET的LINQ to JSON,LINQ to JSON的作用就是根据需要的格式来定制json数据。

比如经常用在分页的json格式如代码:

{
"total": 5, //记录总数
"rows":[
//json格式的数据列表
]
}


 实体类转为有格式的json字符串

               

                JObject jobjectJson = new JObject(new JProperty("total", corderlists.Count),

                    new JProperty("row", new JArray(

                        from p in corderlists select new JObject(

                            new JProperty("strCode", p.strCode),

                            new JProperty("strCustid", p.strCustid),

                            new JProperty("strSaleman",p.strSaleman),

                            new JProperty("dtDate",p.dtDate),

                            new JProperty("decAmt",p.decAmt)

                        ))

                    ));
客户端提交过来的数据一般都是json字符串,有了更好地进行操作(面向对象的方式),所以我们一般都会想办法将json字符串转换为json对象。例如客户端提交了以下数组格式json字符串

string str_corderjson = @"[{ strCode : 'aaaa', strCustid :'bbbb', strSaleman : 'cccc',  decAmt : 3000,dtDate :'2015-9-1' }]";

                //Object或JArray的Parse方法轻松地将json字符串转换为json对象.

                JArray jobjectcorder = JArray.Parse(str_corderjson);

                foreach (JObject aa in jobjectcorder)

                {

                    Console.WriteLine("单号:{0},客户编码{1},金额{2},日期{3}", aa["strCode"], aa["strCustid"], aa["decAmt"], aa["dtDate"]);

                }

也可以使用JsonConvert的DeserializeObject方法

 如果转为实体类,一般用JsonConvert的DeserializeObject方法

                string str_corderjson = @"{ strCode : 'aaaa', strCustid :'bbbb', strSaleman : 'cccc',  decAmt : 3000,dtDate :'2015-9-1' }";

                Corder corderobject = JsonConvert.DeserializeObject<Corder>(str_corderjson);

                Console.WriteLine("单号:{0},客户编码{1},金额{2},日期{3}", corderobject.strCode, corderobject.strCustid, corderobject.decAmt.ToString(), corderobject.dtDate.ToString());


总结

在客户端,读写json对象可以使用”.”操作符或”["key”]”,json字符串转换为json对象使用eval()函数。

在服务端,由.net对象转换json字符串优先使用JsonConvert对象的SerializeObject方法,定制输出json字符串使用LINQ to JSON。由json字符串转换为.net对象优先使用JsonConvert对象的DeserializeObject方法,然后也可以使用LINQ to JSON
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  json c#