具有特定 JsonConverter 的 MVC3 控制器

2024-01-01

这是设置:

我有一些 MVC 控制器,旨在由 jQuery ajax 请求使用。一个正常的请求看起来有点像这样:

$.ajax("/Solicitor/AddSolicitorToApplication", {
    data: putData,
    type: "POST", contentType: "application/json",
    success: function (result) {
       //My success callback
        }
    }
});

我的控制器看起来像这样:

[HttpPost]
public ActionResult InsertLoanApplication(MortgageLoanApplicationViewModel vm)
{
   var mortgageLoanDTO = vm.MapToDTO();
   return Json(_mortgageLoanService.UpdateMortgageLoanApplication(mortgageLoanDTO),   JsonRequestBehavior.DenyGet);
}

对于传递到控制器的大多数对象来说,这完全可以正常工作,但在这种特定情况下,传递的对象的属性之一需要以特定方式反序列化。

我添加了一个之前与 MVC4 Web API 一起使用的 JsonConverter,但在本例中我需要将其应用到常规 mvc 控制器。

我尝试在我的 global.asax 中注册 JsonConverter,如下所示:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new GrizlyStringConverter());

但到目前为止还无法反序列化该对象。


你应该更换内置的JsonValueProviderFactory http://msdn.microsoft.com/en-us/library/system.web.mvc.jsonvalueproviderfactory%28v=vs.98%29.aspx如果您想使用,请使用自定义类Json.NET将 JSON 请求绑定到视图模型时。

您可以编写一个,如下所示这个要点 https://gist.github.com/1588818:

public sealed class JsonDotNetValueProviderFactory : ValueProviderFactory
{
    public override IValueProvider GetValueProvider(ControllerContext controllerContext)
    {
        if (controllerContext == null)
        {
            throw new ArgumentNullException("controllerContext");
        }

        if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
        {
            return null;
        }

        using (var reader = new StreamReader(controllerContext.HttpContext.Request.InputStream))
        {
            var bodyText = reader.ReadToEnd();

            return String.IsNullOrEmpty(bodyText)
                ? null :
                new DictionaryValueProvider<object>(
                    JsonConvert.DeserializeObject<ExpandoObject>(
                        bodyText,
                        new ExpandoObjectConverter()
                    ),
                    CultureInfo.CurrentCulture
                );
        }
    }
}

然后将内置的替换为您自定义的Application_Start:

ValueProviderFactories.Factories.Remove(
    ValueProviderFactories
        .Factories
        .OfType<JsonValueProviderFactory>()
        .FirstOrDefault()
);
ValueProviderFactories.Factories.Add(new JsonDotNetValueProviderFactory());

就是这样。现在,您使用 Json.Net 而不是 JavaScriptSerializer 来处理传入的 JSON 请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有特定 JsonConverter 的 MVC3 控制器 的相关文章

  • 使用 javascript 将多行、缩进的 json 转换为单行

    我想出了以下函数 用于将多行 缩进的 json 转换为单行 function text var outerRX s n r g innerRX s n r return text replace outerRX function 0 1 r
  • ASP.net MVC 项目无法在 IIS 上编译

    我以前只是将 ASP NET 网站上传到实时服务器 IIS 会自动编译它们 但是 当我对 asp net MVC 项目执行相同操作时 我只是收到错误 并且我需要在上传项目之前发布 构建 项目 注意1 我使用的是VWD 2008 Expres
  • ASP.NET MVC 显示配置文件中的用户名

    以下是LogOn来自 Visual Studio 创建的标准默认 ASP NET MVC 项目的用户控件 登录用户控件 ascx Welcome b b
  • 如何在phonegap应用程序中使用存储在localStorage中的json feed?

    这就是我正在做的 向我的网络服务器发出请求 响应采用 json 格式 使用 jquery 模板在我的应用程序中呈现回调数据 非常简单 就像魅力一样 问题是 我想在本地存储一些数据 这样我的应用程序就不必每次都从服务器获取它 3g 很慢 每笔
  • 应用程序内的 SQLite 文件版本兼容性

    我有一个 C NET 应用程序 一种复杂的计算应用程序 其中用户输入数据 处理后的信息使用 JSON 序列化和 EF 保存到 SQLite 文件中 需要时可以将其加载到我们的应用程序中 应用程序在开发过程中经历了很多变化 类也被修改 因此
  • 如何为客户端和服务器缓存设置不同的缓存过期时间

    我想让某些页面为客户端提供 10 分钟缓存 为服务器提供 24 小时缓存 原因是如果页面发生变化 客户端将在 10 分钟内获取更新版本 但如果没有任何变化 服务器只需每天重建一次页面 问题在于输出缓存设置似乎覆盖了客户端设置 这是我的设置
  • 编码的 nsdata utf8 json,在 ios 中带有重音字符

    我向网络服务器发出一个发布请求 该服务器用 JSON 回答我 这是响应的标头 Cache Control private Content Length 826 Content Type application json charset ut
  • 包括过滤器子集合[重复]

    这个问题在这里已经有答案了 我在为 LINQ 查询中包含的项目添加一些过滤条件时遇到一些困难 我的查询就像 var item Context Order Include Inner Include Inner first Include I
  • 传入字典的模型项是类型

    我有一个我理解的错误 但无法找出以正确的方式解决的方法 我有一个 MasterPage 我从该 MasterPage 中调用 标签是一个强类型视图 如下所示 我像这样返回 PartialView return View Tags resul
  • 获取 JSON 中的 HTML 以在 React 组件中呈现为 HTML

    试图找出如何让链接实际呈现为链接 现在 在我从 Json 文件中读取这行文本后 React 将超链接渲染为文字文本 而不将其渲染为链接 一些数据 json about John has a blog you can read a href
  • ASP.NET MVC 子操作的路由匹配

    子动作的路由匹配方法与普通动作有什么不同吗 换句话说 子操作是否有一些自动生成的 url 来进行与父操作类似的匹配 父级或子级动作处理没有区别 任何操作都遵循您在中设置的相同路线定义Application Start 这意味着父母的行为以及
  • Play Framework 2.3 (Scala) 中的自定义 JSON 验证约束

    我设法使用自定义约束实现表单验证 但现在我想对 JSON 数据执行相同的操作 如何将自定义验证规则应用于 JSON 解析器 示例 客户端的 POST 请求包含用户名 username 我不仅要确保该参数是非空文本 而且还要确保该用户确实存在
  • asp.net mvc:将 RedirectToAction(string, object) 转换为 RedirectToAction(x => x.Detail(id))

    任何人都知道如何创建一个方法 我将把它放在扩展类中 该方法将仅使用表达式 无魔术字符串 与 mvc 的 RedirectToAction 执行相同的操作 所以不要写这样的东西 RedirectToAction Detail new Rout
  • 使用 AJAX 加载部分视图不起作用

    请原谅我 我是 MVC 和 AJAX 的新手 目前我只是提交一个表单 我想使用表单中的数据使用 ajax 更新部分视图中的表 My UserInfo部分视图如下所示 model IEnumerable
  • Instagram 粉丝计数 - 使用 jQuery / json 和 PHP

    经过几个小时的工作和一些帮助萨希尔 米塔尔我们已经成功使用 jQuery json 和 PHP 检索 Instagram 关注者计数 这是我们设法整理的内容 希望对其他想要获取 Instagram 信息的人有所帮助 我们的 jQuery I
  • 序列化代码导致未处理的异常

    我正在尝试创建一些代码 可以将类库序列化和反序列化为 AutoCAD 绘图 这个问题与 AutoCAD 没有什么关系 只是它是我无法通过正常方式调试它的原因 我从开始这个项目本文 http adndevblog typepad com au
  • 匿名类上的 NotSerializedException

    我有一个用于过滤项目的界面 public interface KeyValFilter extends Serializable public static final long serialVersionUID 7069537470113
  • PHP 数组通过 JSON 转为 jquery 数组

    我有点困惑为什么以下不起作用 get php
  • IsReusable 属性中的上下文切换

    是否可重用属性 下面是我的理解IsReusable财产 如果处理程序返回静态内容 将值设置为 true 是安全的 但如果线程返回动态内容 为了使其线程安全 IsReusable应设置为 false 在这种情况下 可能会发生上下文切换 这可能
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • .NET 7/8 如何使用 Minimap API 提供组的描述/摘要?

    我添加了一组最小的 API 如下所示 var myapi app MapGroup myapi WithTags My API WithOpenApi and then myapi MapGet GetAllStuff WithName G
  • Oracle/SQL - 合并来自“不相关”不相关表的计数

    假设我有两张桌子GOOD and BAD存储小部件生产的记录 我的桌子看起来像这样 Widget Good Widget A Y Widget A Y Widget B Y Widget Bad Widget A Y Widget B Y
  • 您是否必须取消订阅组件中的 QueryList?

    当使用 ContentChildren or ViewChildren用于监听 DOM 元素更改的装饰器 我是否必须取消订阅QueryList 例如 Component export class ParentComponent implem
  • 在wpf中动态添加列到DataGrid

    我目前正在处理自定义画布 并且必须添加一个表格 所以我认为 dataGrid 就可以了 所以我想创建一个 Table from 数据网格 用户可以通过它在运行时将表格添加到画布 到目前为止 我已经尝试使用列表填充 DataGrid 并成功了
  • 有效地重新格式化数据布局

    我有几个 Excel 电子表格 其数据布局如下raw data https i stack imgur com QOju9 jpg company company1 company2 company3 currency Y E 1 1 20
  • Java 中的 Byte 和 Short 的要点(我已阅读其他问题)

    我的问题是 如果我从 Java 反汇编中得到它 当我使用 byte a 3 b 5 System out println a b 实际上会使用 int 而不是 byte 此外 所有本地内存插槽都是 4B 就像堆栈插槽一样 我意识到分配一个字
  • 为什么我的角度应用程序在更改支持 mat-tree 的数据后变得非常慢?

    我正在实现角度 材料树组件并遇到一些问题 保存对树的更改后 我正在重置支持树的数据 有效 但是应用程序变得非常慢 扩展节点可能需要大约 8 秒 更奇怪的是 实际操作数据源的代码是在其他地方运行的 例如向树中添加新的子项 我们希望 UI 更新
  • 在 iOS 上显示按比例间隔的数字(而不是等宽/表格)

    我在 iOS 中渲染数字 目标为 7 及以上 方法是将它们存储在 NSAttributedString 中并使用 drawAtPoint 进行渲染 我正在使用 Helvetica Neue 我注意到这样画出的数字的位数不成比例 字形都具有相
  • 在 Kivy 中将图像对象作为按钮背景传递

    在Kivy中 有没有办法将图像对象作为按钮背景而不是图像文件名传递 button background normal属性仅接受字符串 我想自定义图像属性 例如allow stretch False 如果成功 我如何指定按钮内的图像对齐方式
  • 对于 64 位应用程序,.NET 使用 WSAStartup 是否安全?

    对于 64 位应用程序 NET Framework 版本和 WSAData 结构的本机 Win32 版本之间不匹配 因为字段的顺序不同 我已经复制了 NET 版本以用于我们基于 C 的产品 但一位同事担心我造成了内存损坏 使用 DllImp
  • Python+OpenCV+py2app:numpy.core.multiarray 导入失败

    环境 mac os x 10 7 5 xcode 4 2 1 python 2 7 5 opencv 2 4 7 py2app 0 7 3 我正在尝试使用 py2app 打包一个基于 opencv 的简单 python 脚本 但构建的应用程
  • 如何使工具提示保持不变,以便可以单击其中的链接

    我有 jQuery 插件 Tooltipsy 来生成链接的工具提示 在此工具提示中 我有相关对象的其他链接 我希望它在初始链接上方弹出 并在我将鼠标移至其上单击链接时停留 这可能吗 有谁知道该怎么做 我没能让它保持打开状态 并且无法再等待
  • Express 中出现意外的“结束后写入”错误

    我正在尝试通过我的服务器代理来自客户端的 api 调用以获取某些第三方服务 其原因是 CORS 问题并在服务器端添加密钥 我通常通过以下方式完成它 app use someService req res gt let url https e
  • 如何在 JavaScript 中计算整数中的 1 位

    如何计算一个整数中 1 的位数 假设你有二进制数11100000 基本上开头有 3 个布尔标志 相应的十进制表示法是224 想知道如何获取该整数并以某种方式循环它以添加它开头的 1 的数量 像这样的事情 var int 224 var n
  • 我的下拉菜单的内容关闭得太快

    我正在构建一个网站 但遇到了这个问题 当我将鼠标悬停在 li 元素上并显示子菜单时 我无法单击其中的任何内容 因为它关闭得非常快 我发现了类似的问题和解决方案已经在这里尝试实现它们但没有成功 JSFiddle 链接 http jsfiddl
  • 在循环中使用glue和dplyr获取关卡名称

    我试图在循环中使用 dplyr 和胶水从表中获取级别名称 我使用循环是因为我获得大量变量来获取分组表和单个表 我在下面显示了一个示例 library dplyr library glue var c vs am for i in var b
  • 本地负载测试:无法打开负载测试结果数据库

    我正在使用 VS2012 创建一些负载测试 我可以使用 无 存储类型运行测试 但是当我将其更改为 数据库 存储类型时 我收到了可怕的错误 无法打开负载测试结果数据库 检查是否 加载由连接字符串指定的测试结果数据库 测试控制器 或本地机器 指
  • 如何在android中圆化textview一侧的角

    我想将文本视图的唯一一侧舍入 例如从左上角开始舍入 从右上角舍入一圈 我使用此代码 但这不起作用
  • 如何估计方法的执行时间?

    如果需要超过两秒才能完成并在另一个线程上重新启动它 我需要取消方法执行 那么 有没有什么方法 回调机制 HACK 我可以让方法通知我它超过了 2 秒的时间限制 在 C 中检查网络驱动器是否存在并超时 https stackoverflow
  • 具有特定 JsonConverter 的 MVC3 控制器

    这是设置 我有一些 MVC 控制器 旨在由 jQuery ajax 请求使用 一个正常的请求看起来有点像这样 ajax Solicitor AddSolicitorToApplication data putData type POST c