MVC 自定义IModelBinder实现json参数转Dictionary<string, string>
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>的更多相关文章
- [MVC] 自定义ActionSelector,根据参数选择Action
很多时候我们会根据UI传入的参数,呈现不同的View.也就是对于同一个Action如何根据请求数据返回不同的View.通常情况下我们会按照如下方法来写,例如: [AcceptVerbs(HttpVer ...
- [MVC] 自定义ActionSelector,根据参数选择Action[转载]
很多时候我们会根据UI传入的参数,呈现不同的View.也就是对于同一个Action如何根据请求数据返回不同的View.通常情况下我们会按照如下方法来写,例如: [AcceptVerbs(HttpVer ...
- Spring MVC(七)--传递JSON参数
有时候参数的传递还需要更多的参数,比如一个获取用户信息的请求中既有用户ID等基本参数,还要求对查询结果进行分页,针对这种场景,一般都会将分页参数封装成一个对象,然后将它和基本参数一起传给控制器,为了控 ...
- SpringBoot:自定义注解实现后台接收Json参数
0.需求 在实际的开发过程中,服务间调用一般使用Json传参的模式,SpringBoot项目无法使用@RequestParam接收Json传参 只有@RequestBody支持Json,但是每次为了一 ...
- Spring boot中自定义Json参数解析器
转载请注明出处... 一.介绍 用过springMVC/spring boot的都清楚,在controller层接受参数,常用的都是两种接受方式,如下 /** * 请求路径 http://127.0. ...
- mvc自定义全局异常处理
异常信息处理是任何网站必不可少的一个环节,怎么有效显示,记录,传递异常信息又成为重中之重的问题.本篇将基于上篇介绍的html2cancas截图功能,实现mvc自定义全局异常处理.先看一下最终实现效果: ...
- JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List转JSON,JSON转List,JSON转C#对象
一.JSON解析与字符串化 JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 ...
- ASP.NET MVC 自定义路由中几个需要注意的小细节
本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...
- Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)
很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是JSON或XML,这里主要讲解Spring MVC为前端提供JSON格式的数据并实现与前台交互.RESTful则是一种软件架构风格.设 ...
随机推荐
- Steganography-图片隐写术
今天做DAM的作业,做到图片水印的时候,想起来当初小调同学把言页之庭的种子通过图片发给我.看到下面这个新闻真是觉得碉堡了!!技术宅又一次可以成功而隐晦的表白了!!哈哈哈!! http://war.16 ...
- 学习笔记:HSB、HSL
转自知乎:http://www.zhihu.com/question/22077462 HSB 为 色相,饱和度,明度, HSL 为 色相,饱和度,亮度, HSV 为色相,饱和度,明度. HSB 和 ...
- UVALive 7302 (最短路)
Probelm Terrorists 题目大意 给一张n个点,m条边的无向图.共有q个询问,每次询问u到v的最短路. n <= 100000 , n-1 <= m <= n + 5 ...
- Visual Studio 2012+jQuery-1.7.1
今天用Visual Studio 2012开发一个网站项目,在集成jqplot图表控件并进行调试的时候(使用的是MVC4框架),加载网页绘制图表的时候总是报错(提示$.jqplot.barRender ...
- LPTHW 笨方法学python 18章
看完18章以后,发现第一个练习中,使用了*args读取全部的的输入参数作为一个元组,但是在他的练习中只给了两个变量去赋值,当用户不清楚这个函数的定义时,就可能会给出过多的变量进这个函数,那么就会出现如 ...
- [Spring] - Property注入
使用Spring注入Properies文件方法: 1.src中新建一个settings.properties文件,内容如下: db_driverClassName=com.mysql.jdbc.Dri ...
- Node.js高级编程读书笔记 - 4 构建Web应用程序
Outline 5 构建Web应用程序 5.1 构建和使用HTTP中间件 5.2 用Express.js创建Web应用程序 5.3 使用Socket.IO创建通用的实时Web应用程序 5 构建Web应 ...
- 支持向量机(SVM)基础
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- 论文笔记之:A CNN Cascade for Landmark Guided Semantic Part Segmentation
A CNN Cascade for Landmark Guided Semantic Part Segmentation ECCV 2016 摘要:本文提出了一种 CNN cascade (CNN ...
- AFX_MANAGE_STATE(AfxGetStaticModuleState())DLL导出函数包含MFC资源
AFX_MANAGE_STATE(AfxGetStaticModuleState()) 先看一个例子: .创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源.指定该对话框ID如下: ...