如何在ASP.NETMVC中设置默认的JSON序列化程序?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (11)

我正在处理已经部分转换为MVC的现有应用程序。每当控制器响应一个JSON ActionResult时,枚举就会以与数字字符串名相反的数字形式发送。这听起来像默认的序列化程序应该是JSON.Net,应该发送枚举作为他们的名字对整个表示,但这不是这种情况。

我是否缺少一个将此设置为默认序列化程序的web.config设置?还是有另一个需要改变的设置?

提问于
用户回答回答于

在ASP.Net MVC4中,JsonResult类中使用的默认JavaScript序列化程序仍然是JavaScriptSerializer(您可以在代码中检查它)

我认为你已经将它与ASP.Net Web.API混淆在一起,其中JSON.Net是默认的JS序列化器,但MVC4不使用它。

所以你需要配置JSON.Net来使用MVC4(基本上你需要创建自己的JsonNetResult),有很多关于它的文章:

如果你还想在控制器动作参数中使用JSON.Net,所以在模型绑定期间,你需要编写你自己的ValueProviderFactory实现。

你需要注册你的实现:

ValueProviderFactories.Factories
    .Remove(ValueProviderFactories.Factories
                                  .OfType<JsonValueProviderFactory>().Single());
ValueProviderFactories.Factories.Add(new MyJsonValueProviderFactory());

可以使用内置JsonValueProviderFactory的示例或本文: ASP.NET MVC 3 - 使用Json.Net改进了JsonValueProviderFactory

扫码关注云+社区