Maison > développement back-end > C++ > Comment désérialiser des objets JSON complexes dans une liste fortement typée dans un contrôleur ASP.NET MVC ?

Comment désérialiser des objets JSON complexes dans une liste fortement typée dans un contrôleur ASP.NET MVC ?

Barbara Streisand
Libérer: 2025-01-04 17:24:39
original
870 Les gens l'ont consulté

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

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);
    }
});
Copier après la connexion

Code de contrôleur modifié

[JsonFilter(Param = "widgets", JsonDataType = typeof(List<PageDesignWidget>))]
public JsonResult SaveOrUpdate(List<PageDesignWidget> widgets)
{
    // ... code to handle the updated widgets ...
}
Copier après la connexion

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;
        }
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal