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

原创 2012年03月22日 11:59:38

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

引言
 在用 .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 对象

    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 对象

    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 的方法,个人喜好而已!

版权声明:本文为博主原创文章,未经博主允许不得转载。

MVC 下 JsonResult 的使用方法(JsonRequestBehavior.AllowGet)<转>

MVC 默认 Request 方式为 Post。 action public JsonResult GetPersonInfo() { var person = new { Name = ...
  • bestlxm
  • bestlxm
  • 2011年08月19日 15:29
  • 32019

关于MVC中返回JSON格式数据提示下载的问题

1.当提交的表单中含有上传控件的时候就会出现此情形 处理方法:在控制器返回Json格式数据的时候,处理一下ContentType 形如:return Json(new { OK = false, M...
  • Return_false
  • Return_false
  • 2012年03月29日 15:15
  • 7754

JSON深入浅出

JSON 是 JavaScript 的一 个严格的子集,利用 JavaScript 中的一些模式来表示结构化数据。 一.JSON 语法  JSON 和 XML 类型,都是一种结构化的数据表示方式。所...
  • dreamsunday
  • dreamsunday
  • 2015年08月28日 22:54
  • 4793

java方法返回json数据

java方法返回json数据
  • u013350170
  • u013350170
  • 2017年04月21日 16:45
  • 2509

java 后台返回json数据给前台

第一步:新建一个JsonBinder.java类,代码如下: import java.io.IOException; import java.text.DateFormat; import ja...
  • xiaocaichonga
  • xiaocaichonga
  • 2012年10月16日 14:59
  • 41032

asp.net输出json

今天在项目中要使用到jquery来操作json,首先通过jquery的ajax来请求asp.net输出数据json格式,之后jquery来 操作json数据。首先看下asp.net的文件Custome...
  • jerrysbest
  • jerrysbest
  • 2011年06月12日 15:28
  • 16345

json教程从入门到使用

json教程从入门到使用 一:入门 简介: JSON(JavaScriptObject Notation)、轻量级数据交换格式、非常适合于服务器与 JavaScript 的交互。 JSON两种格式: ...
  • chenghuaying
  • chenghuaying
  • 2013年10月25日 10:20
  • 15676

.NET下 JSON 的一些常用操作

1.JSON的序列化和反序列化 首先要先添加引用: 代码如下 using System; using System.Collections.Generic; using System.Linq; ...
  • HelloJimmy520
  • HelloJimmy520
  • 2012年03月21日 11:39
  • 18228

.net 返回前端json数据

1.需求 允许.net后端创建json数据,通过response.write()方式动态的回应ajax请求数据,并通过js动态的刷新到页面上。 2.实现方法 2.1前端ajax对于数据的请求和返...
  • cgl_zyw
  • cgl_zyw
  • 2017年06月10日 21:48
  • 490

mvc使用JsonResult返回Json数据

controller 中定义以下方法:  public JsonResult UpdateSingle(int id, string actionName, string actionValue)...
  • weizengxun
  • weizengxun
  • 2011年10月05日 20:25
  • 80799
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.NET MVC3 几种返回 JSON 对象的方式和注意事项
举报原因:
原因补充:

(最多只允许输入30个字)