Deserialisieren Liste von JSON-Objekten in WebApi-Methode
Ich versuche, herauszufinden, wie extrahieren Sie eine Liste von Objekten aus einem JSON-request in einer WEBAPI Aufruf. Innerhalb dieser Liste von Objekten ist ein Dictionary-Objekt ein List-Objekt und eine Liste> object.
Meine Anfrage von meinem MVC-controller, sieht ein bisschen aus wie diese:
//Gets a list of various objects
List<object> values = new List<object>();
values.add(GetItem1()); //Returns a Dictionary<string, string> object
values.add(GetItem2()); //Returns a List<string> object
values.add(GetItem3()); //List<KeyValuePair<string, string>>
var content = new StringContent(JsonConvert.SerializeObject(values), Encoding.UTF8, "application/json");
HttpResponseMessage postResult = client.PostAsync(baseURL, content).Result;
In der WEBAPI-Objekt, ich habe diese Funktion, empfängt der Anruf aus dem MVC controller. Dies ist, wo habe ich meine Probleme, ich kann nicht die Daten aus der Liste. Das erste Element in der Liste, passiert ein Wörterbuch.
[HttpPost]
public void LogError(List<object> myObjectList)
{
Dictionary<string, string> items = (Dictionary<string, string>)myObjectList[0];
List<string> moreItems = (List<string>)myObjectList[1];
List<KeyValuePair<string, string>> evenMoreItems = (List<KeyValuePair<string, string>>)myObjectList[2];
}
Wenn ich versuche zu starten, mit dem Objekt, erhalte ich die Fehlermeldung:
Cannot cast 'myObjectList[0]' (which has an actual type of 'Newtonsoft.Json.Linq.JObject') to 'System.Collections.Generic.Dictionary<string,string>'
Leider bin ich völlig ratlos darüber, was als Nächstes zu tun ist. Ich kann nicht scheinen, einen Weg finden, zu Deserialisieren, die Liste in diesen einzelnen Objekt-Typen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund, warum Sie auf die cast Ausnahme ist, da die Typ-Informationen verloren gehen, die vom client und server.
Einen Weg, um dein Szenario funktioniert, ist Folgendes zu tun
Server (WebApiConfig.cs):
Client:
Probe-Request-Body:
Ich kann mich irren, aber aus der Spitze von meinem Kopf, die Sie nicht über eine
List[object]
wie soll es wissen, was ist der Typ? Sie müssen festlegen, ein konkretes Objekt des Typs, der kommt?
Beginnen wir mit etwas einfachem:
Liste, Werte = new List();
Werte.Add(new Testklasse() { Id = 1, Name = "test1" });
Werte.Add(new Testklasse() { Id = 12, Name = "test2" });
empfangen webapi Methode: