Heim >Backend-Entwicklung >C++ >Wie deserialisiere ich komplexe JSON-Objekte in einer stark typisierten Liste in einem ASP.NET MVC-Controller?

Wie deserialisiere ich komplexe JSON-Objekte in einer stark typisierten Liste in einem ASP.NET MVC-Controller?

Barbara Streisand
Barbara StreisandOriginal
2025-01-04 17:24:39875Durchsuche

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

Deserialisieren komplexer Objekte mit JSON und jQuery in einem ASP.NET MVC-Controller

In ASP.NET MVC ist das Deserialisieren komplexer Objekte aus JSON möglich eine Herausforderung sein. Diese Frage befasst sich mit diesem Problem, bei dem der Benutzer versucht, ein Array komplexer Objekte von jQuery an eine Controller-Aktion zu übergeben.

Um dieses Problem zu beheben, nutzt die Lösung die [JsonFilter](https://web.archive.org/web/20120313075719/http://www.asp.net/web-api/overview/advanced/sending-and-receiving-json-in-aspnet-web- api) benutzerdefiniertes Attribut. Dieses Attribut deserialisiert die JSON-Anfrage in den entsprechenden Typ und bindet sie an einen Aktionsparameter.

Aktualisierter Ansichtscode

// 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);
    }
});

Geänderter Controller-Code

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

Benutzerdefinierter JsonFilter 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;
        }
    }
}

Diese Lösung deserialisiert das JSON-Array effektiv in eine stark typisierte Liste innerhalb des Controllers, sodass der Entwickler komplexe Objekte problemlos bearbeiten kann.

Das obige ist der detaillierte Inhalt vonWie deserialisiere ich komplexe JSON-Objekte in einer stark typisierten Liste in einem ASP.NET MVC-Controller?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn