【问题标题】:Is it possible to set a custom serializer for an area in ASP.Net?是否可以为 ASP.Net 中的区域设置自定义序列化程序?
【发布时间】:2016-06-16 17:26:17
【问题描述】:

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

不幸的是,我不能影响整个项目(大量遗留代码),否则我会这样做:

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

但我可以随意更改这个新区域。

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

【问题讨论】:

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


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

    示例:

    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);
        }
    }
    

    【讨论】:

    • 聪明!目前,这些操作具有键入的签名,而不仅仅是JsonResult;他们不是返回JsonResult,而是返回IEnumerable&lt;thing&gt;;这可以适应类似的工作吗?
    • 您在问题中说的是 JSON 序列化程序,因此是答案。您如何拥有返回 IEnumerable 的操作?您使用的是 MVC 还是 web api?
    • 显然,控制器是在 Web API 中启动的。我在起草帖子时没有意识到这一点。我的控制器只是像public async Task&lt;ApiResponse&lt;IEnumerable&lt;string&gt;&gt;&gt; GetMessages() 这样的路由。
    • 显然,区域正在通过多层配置进行伪造。如果这实际上是在使用 MVC 控制器,那么这是正确的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    相关资源
    最近更新 更多