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则是一种软件架构风格.设 ...
随机推荐
- poj2502 最短路
//Accepted 504 KB 16 ms //spfa最短路 //把n个地铁站作为n个顶点,边权为从一个站到另一个站的时间 //注意:地铁在相邻的两站之间是直线行驶,但其他的就不是了 #incl ...
- Maven安装本地jar
应用场景: 有时候一些jar包(比如oracle 的 ojdbc.jar)由于种种原因,比如版权等,导致maven中央库没有该jar文件,但是却有该jar的pom文件. 这个时候,如果私服也没这jar ...
- php冒泡排序
<?php $arr = array(1,4,2,9,0,10,12,3,7); foreach($arr as $val) { echo $val."--"; } echo ...
- option对象概念
一.基础理解: var e = document.getElementById("selectId"); e.options = new Option("文本&quo ...
- Linux版网易云音乐播放音乐时无限显示“网络错误”的解决办法
安装 gstreamer0.10-plugins-good debian类系统: -plugins-good
- ural 1057Amount of Degrees ——数位DP
link:http://acm.timus.ru/problem.aspx?space=1&num=1057 论文: 浅谈数位类统计问题 刘聪 #include <iostream&g ...
- 5X + 2Y +Z = 50 的所有非负整数解
这种题的解题方法都差不多,不停的循环,不过如果做一下细分,效率应该可以提升很多,下面把最常规效率也最低的代码贴上,有时间再优化 #include <iostream> using name ...
- 适配器模式(Adapter Pattern)
将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 模式中的角色 目标接口(Target):客户所期待的接口.目标可以是具体的或 ...
- hbase-architecture
https://www.mapr.com/blog/in-depth-look-hbase-architecture http://stackoverflow.com/questions/400679 ...
- Productivity Power Tools 的使用
免费的精品: Productivity Power Tools 动画演示 Productivity Power Tools 是微软官方推出的 Visual Studio 扩展,被用以提高开发人员生产率 ...