最近练习写的项目有涉及到json部分,其实明明可以url直接传参,我偏偏用url去传json过去。这里遇到如何js生成json字符串和后台接收时候如何转换成json对象。
这里先把一个检查json格式的工具提供大家,我是用这个去检查自己构造的json是否correct。
地址:<a href:http://www.bejson.com/>http://www.bejson.com/</a>个人觉得蛮好用的,简单方便。
接下来说说我们写javascript时候如何去处理json呢。以我为例,我只需要拼接一个json字符串到url中就够了,贴上代码:
1
//
添加分组
2 $("#btnAddGroup").click(
3 function AddGroup() {
4// 得到选中行 5var rows = new Array();
6 rows = $(‘#dg‘).datagrid(‘getSelections‘);
7if (rows[0]) {
8var Ids = new Array();
9for (var i = 0; i<rows.length; i++)
10 {
11var Id = rows[i].Id;
12var obj=new Object;
13 obj.Id = Id;
14 Ids.push(obj);
15 }
16var ids_toJson = JSON.stringify(Ids);
17 $(‘#tt‘).tabs(‘add‘, {
18 title: ‘Group Topic‘,
19 style: { padding: ‘5px‘ },
20 content: "<iframe scrolling=‘no‘ frameborder=‘0‘ src=‘/AddGroup/NewGroup?Group_Json= { "occurdate":"" + $(‘#occurdate‘).datebox(‘getValue‘)
21 + "","customer":"" +$(‘#customer‘).val()
22 + "","enduser":"" + $(‘#enduser‘).val()
23 + "","product":"" + $(‘#product‘).val()
24 + "","activity":"" + $(‘#activity‘).val()
25 + "","timetaken":"" + $(‘#timetaken‘).numberbox(‘getValue‘)
26 + "","creator":"@ViewData["UserName"]","status":"" + $(‘#status‘).combobox(‘getText‘)
27 + "","mainbody":"" + $(‘#mainbody‘).val()
28 + "","group_ids":" + ids_toJson + "}"29 + "‘ style=‘width:100%;height:99%;‘></iframe>",
30 closable: true31 });
32 }
33else {
34 $.messager.alert(‘Prompt‘, ‘Please choose topics which you want to group !‘, ‘info‘);
35return;
36 }
37 });
看到JSON.stringify(Ids),关键是这个,这对于老程序员感觉很简单,但是对于新程序员无从下手时却提供了很好参考。其实就是把数组转化成了json字符串的一个过程,但是在这之前需要自己构建数组和对象。
我们这样可以传到后台了,但是后台如何处理呢?其实一样我们url传参用的是get方法所以后台你可以用Request.Querystring("xxx")或者Request["xxx"]直接获取到前台的传参。
后台我一开始也不知道用哪种比较好,好像不止一种方法可以把json字符串转换成json对象。
我这里引用 using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
因为之前用过一次,所以我就习惯性使用这个了。
如果大家不知道怎么用我给大家参考另一个帖子,贴过来,我也是看了这个才会的。只是简单功能而已,实现读写json。原文如下:
上一篇JSON博客 《 JSON入门级学习小结--JSON数据结构 》中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的:
反序列化JSON字符串" src="http://img.my.csdn.net/uploads/201302/20/1361365824_9774.jpg" />
如今因为项目需求(asp.net web网站,前台向后台传递JSON数据,并对JSON数据处理,详述见博客《
《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
》),需要对传递的JSON数据反序列化。于是从网上找了许多JSON反序列化的例子,最终决定使用Newtonsoft.Json.dll 反序列化JSON字符串,当然它也可以序列化JSON字符串, Newtonsoft.Json.dll下载链接!
使用Newtonsoft.Json.dll反序列化JSON字符串的步骤:
1.对Newtonsoft.Json.dll添加引用
将Newtonsoft.Json.dll文件拷贝至界面层的Bin目录下,然后右击Bin,弹出“添加引用”页,然后点击“浏览”,然后找到界面层的Bin文件夹,找到Newtonsoft.Json.dll文件,然后点击"添加",引用添加成功!
反序列化JSON字符串" src="http://img.my.csdn.net/uploads/201302/20/1361367731_4076.jpg" />
2.在需要对JSON字符串处理的界面,引用JSON空间,并对JSON进行处理
网上解决办法大致如下:
方法1:
还有一种方法是:
- //定义一个JSON字符串str
- string jsonText = "[{‘a‘:‘aaa‘,‘b‘:‘bbb‘,‘c‘:‘ccc‘},{‘a‘:‘aaa2‘,‘b‘:‘bbb2‘,‘c‘:‘ccc2‘}]";
- //反序列化JSON数据
- JsonReader reader = new JsonReader(new StringReader(jsonText));
- //依次读取反序列化的JSON数据
- while (reader.Read())
- {
- textBox1.Text += "TokenType = " + reader.TokenType + " ValueType = " + reader.ValueType + " Value = " + reader.Value + "rn";
- }
第一种方法编译直接出错,根本不识别JavaScriptArray,JavaScriptObject,就连JavaScriptConvert方法也木有!那好吧,第二种总行了吧,提示:
错误 2 无法创建抽象类或接口“Newtonsoft.Json.JsonReader”的实例
这是怎么回事???
后来在搜到的文章中,发现新版中JavaScriptArray变成了JArray,顺着这个思路,发现变化如下:
- "font-family:KaiTi_GB2312;font-size:18px;">JavaScriptArray--->JArray
- JavaScriptConvert--->JsonConvert
- JavaScriptObject--->JObject
其实这样更改更规范吧!
下面介绍新版本Newtonsoft.Json.dll反序列化JSON字符串的方法
1.直接反序列化JSON字符串
- //引用序列化、反序列化JSON字符串用到的空间
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- //定义一个JSON字符串
- string jsonText = "[{‘a‘:‘aaa‘,‘b‘:‘bbb‘,‘c‘:‘ccc‘},{‘a‘:‘aaa2‘,‘b‘:‘bbb2‘,‘c‘:‘ccc2‘}]";
- //反序列化JSON字符串
- JArray ja =(JArray) JsonConvert.DeserializeObject(jsonText);
- //将反序列化的JSON字符串转换成对象
- JObject o = (JObject)ja[1];
- //读取对象中的各项值
- Console.WriteLine(o["a"]);
- Console.WriteLine(ja[1]["a"]);
2.定义对象列表,然后反序列化JSON字符串
2.1 添加一个类,定义一个对象
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- ///
- ///Customer 的摘要说明
- ///
- public class Customer
- {
- //在序列化前后没有变动
- public string a
- { get; set; }
- //在序列化前后设置和重置
- public string b
- { get; set; }
- //设置为null,但在序列化后填充
- public string c
- { get; set; }
- public string Other
- { get; set; }
- public Customer()
- {
- //
- //TODO: 在此处添加构造函数逻辑
- //
- a = "";
- b = "";
- c = "";
- Other = null;
- }
- }
2.2 反序列化JSON字符串
- //引用序列化、反序列化JSON字符串用到的空间
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- //定义一个JSON字符串
- string jsonText = "[{‘a‘:‘aaa‘,‘b‘:‘bbb‘,‘c‘:‘ccc‘},{‘a‘:‘aaa2‘,‘b‘:‘bbb2‘,‘c‘:‘ccc2‘}]";
- //反序列化JSON字符串,将JSON字符串转换成LIST列表
- List _list = JsonConvert.DeserializeObject>(jsonText);
- //读取列表中的值
- Console.WriteLine(_list[1].a);
- foreach (Customer c in _list)
- {
- Console.WriteLine(c.c);
- }
我感觉这两种反序列化JSON的方法都挺好,其实还用很多方式可以反序列化JSON,本文仅仅借助了Newtonsoft.Json.dll这个工具!
这回大家都应该有个基本了解了吧。希望能给大家些启发,共同加油!
原文:http://www.cnblogs.com/dylanblog/p/4178764.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!