Dada a seguinte aula,
public class Result
{
public bool Success { get; set; }
public string Message { get; set; }
}
Estou retornando um desses em uma ação de controlador assim,
return Json(new Result() { Success = true, Message = "test"})
No entanto, minha estrutura do lado do cliente espera que essas propriedades sejam sucesso e mensagem em letras minúsculas. Sem realmente ter que ter nomes de propriedades em letras minúsculas, essa é uma maneira de realizar esse pensamento, a chamada de função Json normal?
asp.net-mvc
json
James Hughes
fonte
fonte
Alterar o serializador é simples se você estiver usando a API Web, mas infelizmente o próprio MVC usa
JavaScriptSerializer
sem opção para alterar isso para usar JSON.Net.A resposta de James e a resposta de Daniel fornecem a flexibilidade de JSON.Net, mas significa que em todos os lugares onde você normalmente faria,
return Json(obj)
você terá que mudar parareturn new JsonNetResult(obj)
ou semelhante, o que se você tiver um grande projeto pode ser um problema, e também não é muito flexível se você mudar de ideia sobre o serializador que deseja usar.Decidi seguir o
ActionFilter
caminho. O código a seguir permite que você execute qualquer ação usandoJsonResult
e simplesmente aplique um atributo a ele para usar JSON.Net (com propriedades em minúsculas):Você pode até mesmo configurar isso para aplicar-se automaticamente a todas as ações (apenas com o menor impacto de desempenho de uma
is
verificação):FilterConfig.cs
O código
fonte
Com a minha solução, você pode renomear cada propriedade que desejar.
Encontrei parte da solução aqui e no SO
Para que no meu controlador, eu possa fazer isso
No meu modelo, agora posso ter:
Observe que agora, você deve definir o
JsonPropertyAttribute
para todas as propriedades que deseja serializar.fonte
Embora seja uma questão antiga, espero que o snippet de código abaixo seja útil para outros,
Eu fiz abaixo com MVC5 Web API.
fonte
Você pode adicionar essa configuração a
Global.asax
e funcionará em qualquer lugar.fonte