IModelBinder的学习不算深入,现在用它来实现一个json转Dictionary<string, string>

一、原始json转Dictionary<string, string>


如果不用IModelBinder,那么将Json字符串转换为Dictionary<string, string>的代码写法是:

    /// <summary>
/// 手动Json转Dictionary
/// </summary>
/// <param name="Param"></param>
/// <returns></returns>
public ActionResult ManualJsonToDictionary(string Param)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
//将Json字符串转换为Dictionary<string, string>
Dictionary<string, string> DicParam = jss.Deserialize<Dictionary<string, string>>(Param);
return Content(DicParam["Title"]);
}

当这个需求多了之后,这种代码就太多了,可以通过实现IModelBinder来简化。

二、实现IModelBinder简化


简化后的代码如下:

    /// <summary>
/// 测试IModelBinder接口的实现
/// </summary>
/// <param name="DicParam"></param>
/// <returns></returns>
public ActionResult TestJsonToDictionary([ModelBinder(typeof(JsonToDictionaryBinder))]Dictionary<string, string> DicParam)
{
return Content(DicParam["Title"]);
}

其中实现IMidelBinder的类JsonToDictionaryBinder的代码如下:

    /// <summary>
/// Json转Dictionary<string, string>
/// </summary>
public class JsonToDictionaryBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
Dictionary<string, string> DicParam = new Dictionary<string, string>();
if (!string.IsNullOrEmpty(Convert.ToString(controllerContext.HttpContext.Request["Param"])))
{
System.Web.Script.Serialization.JavaScriptSerializer sr = new System.Web.Script.Serialization.JavaScriptSerializer();
DicParam = sr.Deserialize(controllerContext.HttpContext.Request["Param"], typeof(Dictionary<string, string>)) as Dictionary<string, string>;
}
return DicParam;
}
}

前台测试页面代码如下:

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(function(){
var jsonStr = "{\"Id\":\"1\",\"Title\":\"张飞\"}";
$.ajax({
url: "/Home/TestJsonToDictionary",
dataType: "text",
data:{
Param: jsonStr
},
success: function (response) {
alert(response);
}
}) $.ajax({
url: "/Home/ManualJsonToDictionary",
dataType: "text",
data: {
Param: jsonStr
},
success: function (response) {
alert(response);
}
})
})
</script>
</head>
<body>
<div></div>
</body>
</html>

MVC 自定义IModelBinder实现json参数转Dictionary<string, string>的更多相关文章

  1. [MVC] 自定义ActionSelector,根据参数选择Action

    很多时候我们会根据UI传入的参数,呈现不同的View.也就是对于同一个Action如何根据请求数据返回不同的View.通常情况下我们会按照如下方法来写,例如: [AcceptVerbs(HttpVer ...

  2. [MVC] 自定义ActionSelector,根据参数选择Action[转载]

    很多时候我们会根据UI传入的参数,呈现不同的View.也就是对于同一个Action如何根据请求数据返回不同的View.通常情况下我们会按照如下方法来写,例如: [AcceptVerbs(HttpVer ...

  3. Spring MVC(七)--传递JSON参数

    有时候参数的传递还需要更多的参数,比如一个获取用户信息的请求中既有用户ID等基本参数,还要求对查询结果进行分页,针对这种场景,一般都会将分页参数封装成一个对象,然后将它和基本参数一起传给控制器,为了控 ...

  4. SpringBoot:自定义注解实现后台接收Json参数

    0.需求 在实际的开发过程中,服务间调用一般使用Json传参的模式,SpringBoot项目无法使用@RequestParam接收Json传参 只有@RequestBody支持Json,但是每次为了一 ...

  5. Spring boot中自定义Json参数解析器

    转载请注明出处... 一.介绍 用过springMVC/spring boot的都清楚,在controller层接受参数,常用的都是两种接受方式,如下 /** * 请求路径 http://127.0. ...

  6. mvc自定义全局异常处理

    异常信息处理是任何网站必不可少的一个环节,怎么有效显示,记录,传递异常信息又成为重中之重的问题.本篇将基于上篇介绍的html2cancas截图功能,实现mvc自定义全局异常处理.先看一下最终实现效果: ...

  7. JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List转JSON,JSON转List,JSON转C#对象

    一.JSON解析与字符串化 JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 ...

  8. ASP.NET MVC 自定义路由中几个需要注意的小细节

    本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...

  9. Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)

    很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是JSON或XML,这里主要讲解Spring MVC为前端提供JSON格式的数据并实现与前台交互.RESTful则是一种软件架构风格.设 ...

随机推荐

  1. Steganography-图片隐写术

    今天做DAM的作业,做到图片水印的时候,想起来当初小调同学把言页之庭的种子通过图片发给我.看到下面这个新闻真是觉得碉堡了!!技术宅又一次可以成功而隐晦的表白了!!哈哈哈!! http://war.16 ...

  2. 学习笔记:HSB、HSL

    转自知乎:http://www.zhihu.com/question/22077462 HSB 为 色相,饱和度,明度, HSL 为 色相,饱和度,亮度, HSV 为色相,饱和度,明度. HSB 和 ...

  3. UVALive 7302 (最短路)

    Probelm Terrorists 题目大意 给一张n个点,m条边的无向图.共有q个询问,每次询问u到v的最短路. n <= 100000 ,  n-1 <= m <= n + 5 ...

  4. Visual Studio 2012+jQuery-1.7.1

    今天用Visual Studio 2012开发一个网站项目,在集成jqplot图表控件并进行调试的时候(使用的是MVC4框架),加载网页绘制图表的时候总是报错(提示$.jqplot.barRender ...

  5. LPTHW 笨方法学python 18章

    看完18章以后,发现第一个练习中,使用了*args读取全部的的输入参数作为一个元组,但是在他的练习中只给了两个变量去赋值,当用户不清楚这个函数的定义时,就可能会给出过多的变量进这个函数,那么就会出现如 ...

  6. [Spring] - Property注入

    使用Spring注入Properies文件方法: 1.src中新建一个settings.properties文件,内容如下: db_driverClassName=com.mysql.jdbc.Dri ...

  7. Node.js高级编程读书笔记 - 4 构建Web应用程序

    Outline 5 构建Web应用程序 5.1 构建和使用HTTP中间件 5.2 用Express.js创建Web应用程序 5.3 使用Socket.IO创建通用的实时Web应用程序 5 构建Web应 ...

  8. 支持向量机(SVM)基础

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

  9. 论文笔记之:A CNN Cascade for Landmark Guided Semantic Part Segmentation

    A CNN Cascade for Landmark Guided Semantic Part Segmentation  ECCV 2016 摘要:本文提出了一种 CNN cascade (CNN ...

  10. AFX_MANAGE_STATE(AfxGetStaticModuleState())DLL导出函数包含MFC资源

    AFX_MANAGE_STATE(AfxGetStaticModuleState()) 先看一个例子: .创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源.指定该对话框ID如下: ...