c# - 网络 API : Configure JSON serializer settings on action or controller level

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

许多 SO 线程都介绍了在应用程序级别覆盖 Web API 的默认 JSON 序列化程序设置。但是我怎样才能在操作级别配置它的设置呢?例如,我可能想在我的一个操作中使用驼峰式属性进行序列化,而不是在其他操作中。

最佳答案

选项 1(最快)

在操作级别,您可以在使用 Json 方法时始终使用自定义 JsonSerializerSettings 实例:

public class MyController : ApiController
{
    public IHttpActionResult Get()
    {
        var settings = new JsonSerializerSettings
        {
            ContractResolver = new CamelCasePropertyNamesContractResolver()
        };
        var model = new MyModel();
        return Json(model, settings);
    }
}

选项 2( Controller 级别)

您可以创建一个新的 IControllerConfiguration 属性来自定义 JsonFormatter:

public class CustomJsonAttribute : Attribute, IControllerConfiguration 
{
    public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
    {
        var formatter = controllerSettings.Formatters.JsonFormatter;

        controllerSettings.Formatters.Remove(formatter);

        formatter = new JsonMediaTypeFormatter
        {
            SerializerSettings =
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            }
        };

        controllerSettings.Formatters.Insert(0, formatter);
    }
}

[CustomJson]
public class MyController : ApiController
{
    public IHttpActionResult Get()
    {
        var model = new MyModel();
        return Ok(model);
    }
}

关于c# - 网络 API : Configure JSON serializer settings on action or controller level,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44499041/

相关文章:

c# - 反序列化 Microsoft.OData.Edm.Date

c# - 二维物体碰撞统一

使用 HttpClient 的 C# application/x-www-form-urlencoded OAuth 和 HTTP REST 请求

c# - 在 ObservableCollection.CollectionChanged 上运行昂贵的操作

javascript - 如何处理 ASP .NET Api HTTPResponseMessage 来下载文件

c# Chart.Js 和 JSON 与 NewtonSoft

c# - 使用 JSON.NET 解析 json 字符串

c# - 无符号整数 (c++) 与 uint (c#)

asp.net-mvc-3 - w3wp.exe 有内存限制吗?

validation - .NET Web API 2 OWIN Bearer Token Authentication 直接调用