.NET MVC3 几种返回 JSON 对象的方式和注意事项

转自:http://blog.csdn.net/xxj_jing/article/details/7382589

引言在用 .NET MVC3 给我们做 WEB 项目带来很大灵活性同时,对刚上手的同学来说有些细微的设置导致的问题让我们相当的“纠结”!

这里要讨论的就是:使用JQuery的 Ajax 请求后“返回”的JSON 数据问题。

相信大多数同学都会遇到过,就是在后台已经拼接好了一(拼接方法比较多,我的博客也有提到过!)串标准的JSON字符串,但是 Ajax 的 success 方法就是无法正常解析 JSON 对象(相当郁闷啊!如果不是前端高手非得调疯了!)。

下面将解几种返回 JSON 的方法和注意事项!

注:我们默认前端使用的是 JQuery的 Ajax 请求.格式如下 当然我要返回的JSON 是下面形式的

1.前台脚本

/*
{
Data:true,
Msg:"成功",
Result:true
}
*/
//JQuery的 Ajax 请求
$.ajax({
type: "Post",
url: "AddUser.aspx",
data: "",
dataType: "json", //如果要返回 json 这里很重要哦!!详细说明参见JQuery的API手册吧
success: function (result) {
alert(result.Result);
if (result.Result) {
alert('成功');
}
else {
alert("失败");
}
},
complete: function (XMLHttpRequest, textStatus) {
//alert("complete");
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("error");
// alert(XMLHttpRequest);
// alert(errorThrown);
// alert(textStatus);
}
});
}

2.后台代码

定义1:封装返回对象
返回的都是 ResultInfo 对象,对象声明如下

/// <summary>
/// 调用结果信息类
/// </summary>
/// <typeparam name="T">泛型类型</typeparam>
public class ResultInfo<T> where T:new ()
{
/// <summary>
/// 调用结果是否成功
/// </summary>
public bool Result { set; get; }
/// <summary>
/// 调用结果返回的数据
/// </summary>
public T Data { set; get; }
/// <summary>
/// 调用结果返回的相关提示信息
/// </summary>
public string Msg { set; get; }
}

定义2: 
 ToJsonStr() 方法,是我自己封装的一个将对象转换为 Json 
字符串的一个扩展方法。

2.1 请求的返回值为 JsonResult 对象

public JsonResult AddUser()
{
bool flag = true;
ResultInfo<bool> result = new ResultInfo<bool>()
{
Result = flag,
Msg = flag ? "成功" : "失败",
Data = flag
};
JsonResult js = new JsonResult();
js.Data = result;
return js;
}

说明:

JsonResult 对象比较方便了用着,你只需要将对象赋值给它的实例化对象的 Data 属性,之后直接返回它就OK了,其他的如何将对象转为 Json 字符串你都不用考录了!但要注意的是:如果你画蛇添足,把对象转为 Json 字符串,然后再赋值给 Data 属性,客户端是得不到 Json 对象的!

2.2 请求的返回值为 ActionResult 对象

<span style="font-size:12px;"><span style="color: rgb(102, 102, 102); font-family: SimSun; line-height: 26px;"> </span></span>public ActionResult AddUser()
{
bool flag = true;
ResultInfo<bool> result = new ResultInfo<bool>()
{
Result = flag,
Msg = flag ? "成功" : "失败",
Data = flag
};
string json = result.ToJsonStr();
return Content(json);
//return Content(json,"text/json"); //这种写法也可以,第二个参数就是:MIME类型
}

说明:
 当然你也可以使用 2.1 中的方式,返回 JsonResult 对象,咱们现在要用另外一种方式返回JSON。
 用这种方式脚本那边儿需要提供支持!就是要保证 JQuery的 Ajax 请求的 dataType 属性值必须设为 "json",即:dataType: "json"。没有这个支持你得到的将会是一个字符串!

2.3 请求的返回值为 string 对象

<span style="font-size:12px;"><span style="font-family:SimSun;color:#666666;"><span style="line-height: 26px;"> </span></span></span> public string AddUser()
{
bool flag = true;
ResultInfo<bool> result = new ResultInfo<bool>()
{
Result = flag,
Msg = flag ? "成功" : "失败",
Data = flag
};
string json = result.ToJsonStr();
return json;
}

说明:
 用这种方式脚本那边儿需要提供支持!就是要保证 JQuery的 Ajax 请求
的 dataType 属性值必须设为 "json",即:dataType: "json"。
  没有这个支持你得到的将会是一个字符串!

2.4 设置 Response.ContentType 属性

 public string AddUser()
{
bool flag = true;
ResultInfo<bool> result = new ResultInfo<bool>()
{
Result = flag,
Msg = flag ? "成功" : "失败",
Data = flag
};
Response.ContentType = "application/json; charset=utf-8";
string json = result.ToJsonStr();
return json;
}

说明:
 如果在后台代码设置了,响应对象(response)的 Content-Type 等于 application/json; charset=utf-8 时,JQuery的 Ajax 请求可以不用有 dataType 属性。

结论:
  其实讨论了这么多就是解决 2.4 中要解决的问题,客户端如何解析你返回的字符,就是通过 Content-Type 属性决定。
 这么多种方法为的是给让大家用着方便,少走弯路!(我是走了弯路了,很不爽!)
  我喜欢用 2.4 的方法,个人喜好而已!

转: .NET MVC3 几种返回 JSON 对象的方式和注意事项的更多相关文章

  1. Django中的 返回json对象的方式

    在返回json对象的几种方式: 1 from django.shortcuts import render, HttpResponse # Create your views here. from d ...

  2. 【Spring学习笔记-MVC-3】SpringMVC返回Json数据-方式1

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  3. Spring MVC学习笔记——返回JSON对象

    1.想要GET请求返回JSON对象,首先需要导入jackson-all-1.9.4.jar包 2.在控制器中添加不同的show()方法 //show()方法返回JSON对象 @RequestMappi ...

  4. 类型转换及返回json对象的问题

    @ResponseBody @RequestMapping(value="/user/getUserId.do")//method=RequestMethod.POST publi ...

  5. [django]django 3种返回json方法

    django 3种返回json方法 1.手动组装字典返回 from django.http import JsonResponse, HttpResponse from django.shortcut ...

  6. VB 老旧版本维护系列---尴尬的webapi访问返回json对象

    尴尬的webapi访问返回json对象 首先Imports Newtonsoft.Json Imports MSXML2(Interop.MSXML2.dll) Dim URLEncode As Sy ...

  7. spring mvc返回json字符串的方式

    spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json            优点:不需要自己再处理 步骤一:在spring- ...

  8. javascript一种新的对象创建方式-Object.create()

    1.Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不 ...

  9. spring mvc中几种获取request对象的方式

    在使用spring进行web开发的时候,优势会用到request对象,用来获取访问ip.请求头信息等 这里收集几种获取request对象的方式 方法一:在controller里面的加参数 public ...

随机推荐

  1. cocos2d ccitemimage

    #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class H ...

  2. BZOJ1829 : [Usaco2010 Mar]starc星际争霸

    设出$x,y,z$三个未知量分别表示三种单位的战斗力. 那么各种不等式都可以表示成$ax+by+cz\geq 0$的形式. 注意到$z>0$,那么两边都除以$z$得到$ax+by+c\geq 0 ...

  3. 密码等级:至少包含字母、大小写数字、字符中的两种 JS实现方案

    前言 密码,如果设置的太简单,很容易就被攻破,所以很多网站将密码设置的要求设置的挺严格,一般是字母.数字.字符3选2,区分大小写.对于设置得太简单的密码,予以错误提示.或者予以密码等级(低中高)显示, ...

  4. Codeforces Round #203 (Div. 2) A.TL

    #include <iostream> #include <algorithm> using namespace std; int main(){ int n,m; cin & ...

  5. C#设计模式——抽象工厂模式(原文转自:http://blog.jobbole.com/78059/)

    一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创 ...

  6. 用Git进行协同开发

    用Git进行协同开发 问题场景描述 常常会遇到这样的协同场景:后台的同事和前端的同事需要共同开发一个新功能,而他们的代码相互依赖,所以需要不停地更新各自的代码进行联调. 对于这种场景,最简单的方式就是 ...

  7. 给NSString增加Java风格的方法

    给NSString增加Java风格的方法 文章目录 我实在受不了 NSString 冗长的方法调用了,每次写之前都要查文档.特别是那个去掉前后多余的空格的方法,长得离谱.与之对应的别的语言,拿 jav ...

  8. 利用Python的三元表达式解决Odoo中工资条中城镇、农村保险的问题

    Python中没有像C#中有三元表达式 A?B:C 但在python中可以通过 A if condition else B 的方式来达到同样的效果. 例如 : 1 if True else 0 输出 ...

  9. virsh命令

    查看虚拟机: [root@super67 ~]# virsh list Id    Name                           State --------------------- ...

  10. lightning mdb 源代码分析系列(3)

    本系列前两章已经描述了系统架构以及系统构建的基础内存映射,本章将详细描述lmdb的核心,外存B+Tree的操作.本文将从基本原理.内存操作方式.外存操作方式以及LMDB中的相关函数等几方面描述LMDB ...