在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中文網其他相關文章!