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. oracle、mysql、sql server等;流行数据库的链接驱动配置

    系统的写博客的时间不多,但是还想一直写来坚持,就没事写写积累下来的知识点吧 #ORACLE #jdbc.driver=oracle.jdbc.driver.OracleDriver#jdbc.url= ...

  2. Hadoop随笔(二):Hadoop V1到Hadoop V2的主要变化

    一.消失的概念与新鲜的名词 Hadoop V2相对于Hadoop V1的变化主要在于资源管理和任务调度,计算模型仍然保持map/reduce的模型.资源管理和任务调度的变化导致了工作流程的变化,一些概 ...

  3. js便签笔记(3)——切记:appendChild()、insertBefore()是移动element节点!

    appendChild().insertBefore()是移动element节点,看书的时候注意过,也可以做一个简单的例子测试一下: <div id="div1"> & ...

  4. Scalding初探之二:动手来做做小实验

    输入文件 Scalding既可以处理HDFS上的数据,也可以很方便地在本地运行处理一些test case便于debug,Source有好多种 1 TextLine(filename) TextLine ...

  5. Node.js高级编程读书笔记 - 5 数据库 - Never

    Outline 6 连接数据库 6.1 使用node-mysql连接MySQL数据库 6.2 使用Nano连接CouchDB数据库 6.3 使用Mongoose连接MongoDB数据库 6 连接数据库 ...

  6. Tomcat 安装--小白教程

    因为要进行微信公众号的开发模式,所以需要安装Tomcat Web服务器,现在就把我的安装过程写下来,希望可以帮到有需要的人~首先,我们需要下载tomcat的安装包,直接去官网就好啦,http://to ...

  7. QTreeWidget创建

    QTreeWidget.顾名思义,这个类用来展示树型结构.同前面说的QListWidget类似,这个类需要同另外一个辅助类QTreeWidgetItem一同使用.不过,既然是提供方面的封装类,即便是看 ...

  8. linux ssh服务器

    默认配置文件在: /etc/ssh/下 有两个需要配置的文件: ssh_config    ssh_client配置文件 sshd_config  ssh服务器的配置文件 两个文件的详细介绍和配置方法 ...

  9. 【Unity3D技巧】在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信 (二) : 引入中间层NotificationCenter

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 一对多的观察者模式机制有什么缺点? 想要查看 ...

  10. Windows xp IIS显示403错误解决方案

    XP的IIS很烦人,很多限制. 最近一客户用XP安装IIS,总提示:403.9 错误 连接的用户过多 解决方案: 1)安装IIS配置工具 下载地址:http://download.microsoft. ...