一尘不染

在ASP.NET MVC中设置默认的JSON序列化器

c#

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

我是否缺少将其设置为默认序列化程序的web.config设置?还是还有其他需要更改的设置?


阅读 427

收藏
2020-05-19

共1个答案

一尘不染

在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

2020-05-19