首頁 > 後端開發 > C++ > 如何在 ASP.NET MVC 控制器中將複雜的 JSON 物件反序列化為強類型清單?

如何在 ASP.NET MVC 控制器中將複雜的 JSON 物件反序列化為強類型清單?

Barbara Streisand
發布: 2025-01-04 17:24:39
原創
862 人瀏覽過

How to Deserialize Complex JSON Objects into a Strongly-Typed List in an ASP.NET MVC Controller?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板