2017-04-19 3 views
1

이전 API를 현재의 .Net Core Web API로 마이그레이션하려고합니다. 현재 API는 camelCasing을 사용하여 JSON을 반환하지만 이전 API는 PascalCasing을 사용하므로 클라이언트를 업데이트하지 않아도됩니다..Net Core Web API 컨트롤러마다 JSON 케이싱이 다릅니다.

서비스에서 전역이 아닌 컨트롤러별로 사용할 직렬화 전략을 지정하는 방법이 있습니까?

+0

가능한 중복 http://stackoverflow.com/questions/38139607 : 여기

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public class CustomJsonFormatter : ActionFilterAttribute { private readonly string formatName = string.Empty; public CustomJsonFormatter(string _formatName) { formatName = _formatName; } public override void OnActionExecuted(ActionExecutedContext context) { if (context == null || context.Result == null) { return; } var settings = JsonSerializerSettingsProvider.CreateSerializerSettings(); if (formatName == "camel") { settings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver(); } else { settings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); } var formatter = new JsonOutputFormatter(settings, ArrayPool<Char>.Shared); (context.Result as Microsoft.AspNetCore.Mvc.OkObjectResult).Formatters.Add(formatter); } } 

과 당신의 컨트롤러입니다/asp-net-core-1-0-web-api-use-camelcase) – Set

+0

그렇게 생각하지 않습니다. 컨트롤러마다가 아니라 전체 API에서 camelCase를 묻는 것 같습니다. –

+0

[JsonProperty ] 태그를 관련 모델의 모든 속성에 추가합니다. 이상적인 솔루션은 아닙니다 (우리는 모델이 많습니다).하지만 지금은 효과가 있습니다. –

답변

1

예, 컨트롤러의 속성을 사용하여이를 달성 할 수 있습니다. 아래의 샘플을 참조하십시오 :

[CustomJsonFormatter("camel")] 
[Route("api/[controller]")] 
public class ValuesController : Controller 
{ 
    // GET: api/values 
    [HttpGet] 
    public IActionResult Get() 
    { 
     Car car = new Car { Color = "red", Make = "Nissan" }; 

     return Ok(car); 
    }   
} 
[asp.net 코어 1.0 웹 API를 사용 낙타 표기법 (의
관련 문제