C#Json数据交互
问题:写项目时,难免会遇到前台和后台要进行数据交换,往前台传一个对象或一个对象集,往后台传一个对象,一个对象集。怎么传,你当然不能直接去传递一个对象或对象集,我们可以利用JSON数据相互之间传值。
Json在跨域之间传数据也非常方法,这是它的优点。
你需要知道:传递数据我们用JSON,JSON,JSON,前台传递JSON数据格式到后台,后台需要反序列化。后台传前台,需要序列化后传。
简单了解 JSon数据。
Json语法:
- 对象表示为键值对
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON 键/值对
<script>
var obj = { a: 'Hello', b: 'World' }; //这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串
console.log(obj);
console.log(obj.a);//JS对象可以直接用 console.log(json); //就是一个字符串
console.log(json.a); //JSON格式不好直接用,需要转型
</script>

<script>
// 要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法:
//序列化
var json = JSON.stringify({ a: 'Hello', b: 'World' }); //结果是 '{"a": "Hello", "b": "World"}'
console.log(json);
// 要实现从 JSON 转换为对象,使用 JSON.parse() 方法:
//反序列化
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}
console.log(obj);
</script>

<script>
//表示对象
// JSON最常用的格式是对象的 键值对。例如下面这样:
var dd = { "firstName": "Brett", "lastName": "McLaughlin" };
console.log(dd.firstName);
// 表示数组
//和普通的 JS 数组一样,JSON 表示数组的方式也是使用方括号 []
var ff = {
"people": [{
"firstName": "Brett",
"lastName": "McLaughlin"
},
{
"firstName": "Jason",
"lastName": "Hunter"
}
]
};
console.log(ff.people[].firstName);
</script>

配合Aajx。
一条数据:
后台返回JSon数据,前台用
①字符串
<script>
$.ajax({
type: "Post",
url: "GetJson.ashx",
data: "",
dataType: "json", //既然用到json,你就规定数据类型为json格式的
async: true,
success: function (data) {
console.log(data);
console.log(data.Name);
}
})
</script>
public void ProcessRequest(HttpContext context) //一般处理程序
{
context.Response.ContentType = "text/plain";
//返回JSon格式数据
string aa = "{\"Name\":\"李某\",\"Age\":\"18\"}"; //json格式必须为这个
context.Response.Write(aa); //这里返回JSon数据,前台接受变成了Object,如果前台是string类型就转成对象。
}

如果我们的JSON字符串很复咋,这样写字符串不太好。
②自带命名空间序列化

context.Response.ContentType = "text/plain";
//可以序列化和反序列化
JavaScriptSerializer json = new JavaScriptSerializer();
FunctionDemo.Model.Users usModel = new FunctionDemo.BLL.Users().GetModel();
context.Response.Write(json.Serialize(usModel));
$.ajax({
type: "Post",
url: "GetJson.ashx",
data: "ob="+JSON.stringify(ob)+"&js="+js,
dataType: "json",
async: true,
success: function (data) {
console.log(typeof (data));
console.log(data);
alert(data.LoginName);
},
error: function () {
alert(" 错了");
}
})

③借助我们的
这个dll ———> 下载地址
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
////返回JSon格式数据
// string aa = "{\"Name\":\"李某\",\"Age\":\"18\"}"; //json格式必须为这个
//context.Response.Write(aa); //这里返回JSon数据,前台接受变成了Object
//可以把一张表的字段和值这样写
JsonData jd = new JsonData(); JsonData.doc介绍
jd["Name"] = "李某";
jd["Age"] = ;
context.Response.Write(jd.ToJson()); //这个跟上面的字符串JSon效果是一样的 可以简化我们的JSon字符串
}
可以返回嵌套的
//返回JSon格式数据
string aa = "{\"Name\":\"李某\",\"Age\":\"18\",\"Love\":[{\"one\":\"运动\",\"two\":\"哦哦\"},{\"one\":\"看电影\"}]}"; //json格式必须为这个
context.Response.Write(aa); //这里返回JSon数据,前台接受变成了Object
<script>
$.ajax({
type: "Post",
url: "GetJson.ashx",
data: "",
dataType: "json",
async: true,
success: function (data) {
console.log(data);
console.log(data.Name);
console.log(data.Love[].one);
}
})
</script>

发现问题:
不管是我们手写Json字符串,还是利用JsonData转成JSON格式,你会发现都需要你去构造,如果你需要得到一张表,并且列很多,你要写到什么。并且有个很严重的缺点,就是获取多条数据的时候改怎么处理,很麻烦。以上的只能使用与小量数据,还好我们知道一个dll可以很好的解决这个问题。
④这个dll之前也用过,就是 Newtonsoft.Json 下载地址:点击
我们的来看看列子。
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
// DataSet ds = new FunctionDemo.BLL.Users().GetList("");
FunctionDemo.Model.Users usModel = new FunctionDemo.BLL.Users().GetModel();
// JsonConvert.SerializeObject 这个静态方法 翻译就是序列化对象
context.Response.Write(JsonConvert.SerializeObject(usModel)); //不能直接返回一个对象,或一个数据集
}
<script>
$.ajax({
type: "Post",
url: "GetJson.ashx",
data: "",
dataType: "json",
async: true,
success: function (data) {
console.log(typeof(data));
console.log(data);
},
error: function () {
alert(" 错了");
}
})
</script>

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
DataSet ds = new FunctionDemo.BLL.Users().GetList("");
FunctionDemo.Model.Users usModel = new FunctionDemo.BLL.Users().GetModel();
// JsonConvert.SerializeObject 这个静态方法 翻译就是序列化对象
//可以自己打造一个对象,把需要的数据填写进去 这个位子很灵活需要根据你想要的进行处理
//也可以打造一张表 就可以添加很多数据了
var dd= new { Name = usModel.LoginName, Age = , Sex = "男" }; context.Response.Write(JsonConvert.SerializeObject(dd));
}
多条数据
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
DataSet ds = new FunctionDemo.BLL.Users().GetList("");
FunctionDemo.Model.Users usModel = new FunctionDemo.BLL.Users().GetModel();
// JsonConvert.SerializeObject 这个静态方法 翻译就是序列化对象 context.Response.Write(JsonConvert.SerializeObject(ds.Tables[]));
}
<script>
$.ajax({
type: "Post",
url: "GetJson.ashx",
data: "",
dataType: "json",
async: true,
success: function (data) {
console.log(typeof(data));
console.log(data);
console.log(`姓名:${data[].LoginName}`);
},
error: function () {
alert(" 错了");
}
})
</script>

总结:在后台获取数据返回时需要序列化成JSON格式的数据,在前台接收时可用先看下数据类型,如果是JSON数据格式就转下型,无非就是Eval(data)和JSon.Pase(data)。
在后台我们返回JSON字符串,在前台我们需要变成Object.
前台返回JSON数据后台接收
这个前台都是一样的,下面主要看看后台怎么反序列化数据
<script>
var ob = { "LoginName": "李某", "PassWord": "" }; //对象 这里的属性跟你的类字段一样的,不要自己瞎起名字
var js = '{"LoginName":"社会我李哥","PassWord":"哦"}'; //JSON
//传递的数据必须为JSON格式的
//把对象转成JSon字符串传进入
$.ajax({
type: "Post",
url: "GetJson.ashx",
data: "ob="+JSON.stringify(ob)+"&js="+js, //测试传一个对象,不转型的时候,后台无法处理,所以传递必须为JSON数据格式 一个,数组都可以
dataType: "json",
async: true,
success: function (data) {
console.log(typeof (data));
console.log(data);
alert(data.LoginName);
},
error: function () {
alert(" 错了");
}
})
</script>
后台:
string ob = context.Request.Form["ob"];// "{\"LoginName\":\"李某\",\"PassWord\":\"159\"}"
string js = context.Request.Form["js"];// "{\"LoginName\":\"社会我李哥\",\"PassWord\":\"哦\"}"
//下面需要做的就是把JSON转成对象(一个确定的对象)
//①自带的
JavaScriptSerializer json = new JavaScriptSerializer();
//反序列化,主要他需要的参数,如果是数据集 就换成 List<T>
FunctionDemo.Model.Users one = json.Deserialize(ob, typeof(FunctionDemo.Model.Users)) as FunctionDemo.Model.Users;
//②dll typeof(T) 这个参数一个要带,不然成功不了
FunctionDemo.Model.Users model = JsonConvert.DeserializeObject(js, typeof(FunctionDemo.Model.Users)) as FunctionDemo.Model.Users;
//或者 JsonConvert.DeserializeObject<FunctionDemo.Model.Users>(js);
//如果你传递的JSON数据没有确切的类型来接受,你自己可以在上面写一个 class ,属性值更你传递过来的属性是一一对应的就行
经过测试获取成功
总结:前台传数据之前就需要转成JSON格式,后台才好反序列化。
到此Json传递数据就完了。
C#Json数据交互的更多相关文章
- json数据交互
springmvc 的json数据交互 - 哎幽的成长 - CSDN博客--和老师讲课相同http://blog.csdn.net/u012373815/article/details/4720818 ...
- spring-boot json数据交互
SpringBoot学习之Json数据交互 最近在弄监控主机项目,对javaweb又再努力学习.实际的项目场景中,前后分离几乎是所以项目的标配,全栈的时代的逐渐远去,后端负责业务逻辑处理,前端负责数据 ...
- SpringMVC JSON数据交互
本节内容: @RequestBody @ResponseBody 请求json,响应json实现 前端可以有很多语言来写,但是基本上后台都是java开发的,除了c++(开发周期长),PHP和#Net( ...
- springMVC学习(11)-json数据交互和RESTful支持
一.json数据交互: json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据. springMVC进行json交 ...
- SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器
一.参数的传递 1.简单的参数传递 /* @RequestParam用法:入参名字与方法名参数名不一致时使用{ * value:传入的参数名,required:是否必填,defaultValue:默认 ...
- Spring MVC之JSON数据交互和RESTful的支持
1.JSON概述 1.1 什么是JSON JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式.它是基于JavaScript的一个子集,使用了C.C ...
- springmvc的json数据交互
准备 @RequestBody 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json ...
- 1.4(Spring MVC学习笔记)JSON数据交互与RESTful支持
一.JSON数据交互 1.1JSON简介 JSON(JavaScript Object Notation)是一种数据交换格式. 1.2JSON对象结构 {}代表一个对象,{}中写入数据信息,通常为ke ...
- SprimgMVC学习笔记(八)—— SpringMVC与前台json数据交互
一.两种交互形式 可以看出,前台传过来的方式有两种,一种是传json格式的数据过来,另一种就是在url的末尾传普通的key/value串过来,针对这两种方式,在Controller类中会有不同的解析, ...
- springmvc学习笔记(18)-json数据交互
springmvc学习笔记(18)-json数据交互 标签: springmvc springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 加入json转换的依赖 ...
随机推荐
- linux环境下jdk部署配置
1.java官网下载相关的jdk包 2.配置系统环境变量,编辑/etc/profile文件,在文件的末尾添加一下信息: export JAVA_HOME=/usr/jdk1.8.0_101export ...
- linux查看硬盘空间,删除大文件
df -Phdu -h --max-depth=1du -sh /u02/weblogic/user_projects/domains/logsdu -sh /u02/mysqlfind / -siz ...
- jmeter使用BeanShell Sampler测试自己写的java接口(一)
上次直接使用jmeter里面的FTPsampler没有连接成功 现在想着自己写java代码,通过jmeter进行调用进行连接测试实现并发 代码引文: http://www.cnblogs.com/ch ...
- Spring 学习(三)AOP
(1)AOP概述 - AOP:面向切面编程,扩展功能不修改源代码实现 - AOP采取横向抽取机制,取代了传统的纵向继承体系重复性代码 (2)AOP底层原理 原始方法------->纵向继承体系 ...
- postgresql导出某张表的数据
\copy 表名 to 路径 with csv 比如: \copy dataset to /home/backup/dataset.csv with csv \copy dataset to /hom ...
- POJ 1556 E - The Doors
题意:给定n堵墙,现在要你从(0,5)走去(10,5)的最短距离 思路:刚开始还想模拟,就是从(0,5)走,每次x向右一格,然后判断有没和线段相交就可以.但是它的们有可能是小数形式给出的,这样就GG了 ...
- mysql双主互备
mysql主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave),备服务器从主服务器同步数据,完成数据的 ...
- java 多线程之取消与关闭
要使线程安全,快速,可靠的停下来并不是一件容易的事情.java并没有提供任何机制来安全的终止线程.但是java提供了中断(interrupt)使一个线程可以终止另一个线程的当前工作 每个线程都有一个b ...
- 《Head First 设计模式》之单件模式
单件模式(Singleton) ——确保一个类只有一个实例,并提供全局访问点. 有一些对象其实我们只需要一个,比如线程池.缓存.对话框.处理偏好设置和注册表的对象.日志对象.如果制造出多个实例,就会导 ...
- mysql数据库初步了解
一丶数据库服务器丶数据管理系统丶数据库丶表与记录的关系 记录:1 xxxx 3245646546(多个字段的信息组成一条记录,即文件中的一行内容) 表: Student.school,class_li ...