Il existe assez peu de réponses à gérer côté client, mais vous pouvez changer la sortie côté serveur si vous le souhaitez.
Il ya quelques façons d'aborder cette, je vais commencer avec les bases. Vous aurez à la sous-classe le JsonResult de classe et de remplacer les ExecuteResult méthode. À partir de là, vous pouvez prendre quelques approches différentes pour modifier la sérialisation.
Approche 1:
L'implémentation par défaut utilise le JsonScriptSerializer. Si vous jetez un oeil à la documentation, vous pouvez utiliser le RegisterConverters méthode pour ajouter des JavaScriptConverters. Il y a un peu de problèmes avec cela: Le JavaScriptConverter sérialise un dictionnaire, c'est qu'il prend un objet et sérialise un dictionnaire Json. Afin de rendre l'objet à sérialiser à une chaîne, il nécessite un peu de hackery, voir le post. Ce hack sera également échapper à la chaîne.
public class CustomJsonResult : JsonResult
{
private const string _dateFormat = "yyyy-MM-dd HH:mm:ss";
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
if (!String.IsNullOrEmpty(ContentType))
{
response.ContentType = ContentType;
}
else
{
response.ContentType = "application/json";
}
if (ContentEncoding != null)
{
response.ContentEncoding = ContentEncoding;
}
if (Data != null)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
// Use your custom JavaScriptConverter subclass here.
serializer.RegisterConverters(new JavascriptConverter[] { new CustomConverter });
response.Write(serializer.Serialize(Data));
}
}
}
Approche 2 (recommandé):
La deuxième approche est de commencer avec le substituée JsonResult et aller avec une autre sérialiseur Json, dans mon cas, le Json.NET sérialiseur. Cela ne nécessite pas la hackery de l'approche 1. Voici ma mise en œuvre de la JsonResult sous-classe:
public class CustomJsonResult : JsonResult
{
private const string _dateFormat = "yyyy-MM-dd HH:mm:ss";
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
if (!String.IsNullOrEmpty(ContentType))
{
response.ContentType = ContentType;
}
else
{
response.ContentType = "application/json";
}
if (ContentEncoding != null)
{
response.ContentEncoding = ContentEncoding;
}
if (Data != null)
{
// Using Json.NET serializer
var isoConvert = new IsoDateTimeConverter();
isoConvert.DateTimeFormat = _dateFormat;
response.Write(JsonConvert.SerializeObject(Data, isoConvert));
}
}
}
Des crédits supplémentaires:
James Newton-King