是否可以为ASP.Net中的某个区域设置自定义序列化程序?

时间:2016-06-16 17:26:18

标签: c# asp.net asp.net-web-api json.net

我正在尝试配置一个区域,以便为ASP.Net项目中新创建的区域使用一些自定义JSON序列化程序设置。我正在编写一个Web API控制器。

不幸的是,我无法影响整个项目(许多遗留代码),否则我就会这么做:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
json.SerializerSettings.Converters = new List<JsonConverter>() { new StringEnumConverter() };

但是我可以改变这个新领域,但我觉得合适。

是否有可能以与上述代码类似的方式配置这个新区域(还有其他我不想影响的区域)?

1 个答案:

答案 0 :(得分:4)

  1. 创建一个继承自JsonResult的类。编写逻辑以在此类中实现所需的序列化程序。
  2. 创建基本控制器类并覆盖Json方法以返回自定义JsonResult
  3. 最后,更改区域内的所有控制器以继承自定义BaseController
  4. 示例:

    public abstract class BaseController : Controller
    {
        protected override JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior)
        {
            return new MySpecialJsonResult //Inherits from JsonResult and contains the desired serializer implementation
            {
                Data = data,
                ContentType = contentType,
                ContentEncoding = contentEncoding,
                JsonRequestBehavior = behavior
            };
        }
    }
    
    public class EmployeeController : BaseController
    {
        public JsonResult Index()
        {
            //Your custom serializer will be used...
            return Json(new{Text="Hello"},JsonRequestBehavior.AllowGet);
        }
    }