C# - JSON详解

来源:互联网 发布:2017淘宝网红店排名 编辑:程序博客网 时间:2024/06/09 16:33

先要引用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


0 0
原创粉丝点击