我正在处理已部分转换为MVC的现有应用程序。每当控制器以JSON ActionResult响应时,枚举都以与字符串名称相对的数字发送。听起来好像默认的序列化程序应该是JSON.Net,它应该将枚举作为其名称发送,而不是整数表示形式,但这不是这种情况。
我是否缺少将其设置为默认序列化程序的web.config设置?还是还有其他需要更改的设置?
在ASP.Net MVC4中,JsonResult该类中使用的默认JavaScript序列化器仍然是JavaScriptSerializer(可以在代码中进行检查)。
JsonResult
我认为您已经将它与ASP.Net Web.API混淆了,其中JSON.Net是默认的JS序列化器,但MVC4不使用它。
因此,您需要将JSON.Net配置为与MVC4配合使用(基本上,您需要创建自己的JsonNetResult),有关它的文章很多:
JsonNetResult
如果还希望将JSON.Net用于控制器操作参数,那么在模型绑定期间,则需要编写自己的ValueProviderFactory实现。
ValueProviderFactory
您需要向以下位置注册实现:
ValueProviderFactories.Factories .Remove(ValueProviderFactories.Factories .OfType<JsonValueProviderFactory>().Single()); ValueProviderFactories.Factories.Add(new MyJsonValueProviderFactory());
您可以使用内置JsonValueProviderFactory示例或本文作为示例: ASP.NET MVC 3 –使用Json.Net改进的JsonValueProviderFactory
JsonValueProviderFactory