Désérialiser des objets complexes avec JSON et jQuery dans un contrôleur ASP.NET MVC
Dans ASP.NET MVC, la désérialisation d'objets complexes à partir de JSON peut être un défi. Cette question résout ce problème, où l'utilisateur tente de transmettre un tableau d'objets complexes de jQuery à une action de contrôleur.
Pour résoudre ce problème, la solution exploite le [JsonFilter](https://web.archive.org/web/20120313075719/http://www.asp.net/web-api/overview/advanced/sending-and-receive-json-in-aspnet-web- api) attribut personnalisé. Cet attribut désérialise la requête JSON dans le type approprié et la lie à un paramètre d'action.
Code de vue mis à jour
// Serialize the results into a JSON object var postData = { widgets: results }; // Send the JSON data to the controller $.ajax({ url: '/portal/Designer.mvc/SaveOrUpdate', type: 'POST', dataType: 'json', data: $.toJSON(widgets), contentType: 'application/json; charset=utf-8', success: function(result) { alert(result.Result); } });
Code de contrôleur modifié
[JsonFilter(Param = "widgets", JsonDataType = typeof(List<PageDesignWidget>))] public JsonResult SaveOrUpdate(List<PageDesignWidget> widgets) { // ... code to handle the updated widgets ... }
JsonFilter personnalisé Attribut
public class JsonFilter : ActionFilterAttribute { public string Param { get; set; } public Type JsonDataType { get; set; } public override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.HttpContext.Request.ContentType.Contains("application/json")) { string inputContent; using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream)) { inputContent = sr.ReadToEnd(); } var result = JsonConvert.DeserializeObject(inputContent, JsonDataType); filterContext.ActionParameters[Param] = result; } } }
Cette solution désérialise efficacement le tableau JSON en une liste fortement typée au sein du contrôleur, permettant au développeur de manipuler facilement des objets complexes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!