在 ASP.NET MVC 控制器中使用 JSON 和 jQuery 反序列化复杂对象
在 ASP.NET MVC 中,从 JSON 反序列化复杂对象可以是一个挑战。这个问题解决了这个问题,用户尝试将复杂对象的数组从 jQuery 传递到控制器操作。
为了解决这个问题,该解决方案利用了 [JsonFilter](https://web.archive. org/web/20120313075719/http://www.asp.net/web-api/overview/advanced/sending-and-receiving-json-in-aspnet-web-api)自定义属性。此属性将 JSON 请求反序列化为适当的类型并将其绑定到操作参数。
更新的视图代码
// 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); } });
修改的控制器代码
[JsonFilter(Param = "widgets", JsonDataType = typeof(List<PageDesignWidget>))] public JsonResult SaveOrUpdate(List<PageDesignWidget> widgets) { // ... code to handle the updated widgets ... }
自定义 JsonFilter属性
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; } } }
该解决方案有效地将JSON数组反序列化为控制器内的强类型列表,使开发人员能够轻松操作复杂的对象。
以上是如何在 ASP.NET MVC 控制器中将复杂的 JSON 对象反序列化为强类型列表?的详细内容。更多信息请关注PHP中文网其他相关文章!