2017-03-24 8 views
3

Ich habe jeden ähnlichen Artikel überprüft Ich kann hier finden und versuchte alles, was aussah wie es könnte ohne Erfolg funktionieren (obv, da ich jetzt die Frage stelle).WebAPI 2.0 Post Nicht Deserialisieren Liste <T> Eigenschaft

Ich habe einen WebAPI 2.0-Controller mit einer POST-Aktion, die ein Objekt vom Typ Reservation aufnimmt. Dieses Objekt enthält unter anderem eine Eigenschaft mit dem Namen Items vom Typ EquipmentItems. Wie Sie sich vorstellen können, ist dies eine List-Eigenschaft. Ich schicke das Reservierungsobjekt um (unter Verwendung von PostAsJsonAsync("api/Reservation", reservation).Result, wenn es jemanden interessiert).

Wenn ich im API-Controller lande, ist das Objekt Reservation vollständig mit allem gefüllt, außer was in der -Eigenschaft ist.

Im Sinne der vollständigen Offenbarung, die Items Eigenschaft innerhalb der Reservation Klasse, ist eigentlich als eine Liste definiert, wo T IItemData Schnittstelle ist. EquimpentItem erbt von IItemData tho, also nicht sicher, ob das die Sache erschwert.

Kann der Deserializer des nativen Controllers nicht mit List umgehen, wo T Interface ist?

Was ich weiß funktioniert die Definition der Liste als ein reguläres Array. Das funktioniert sehr gut, aber ich habe andere Anforderungen, die mich in Richtung List geführt haben.

Haben Sie Vorschläge, wie Sie die List-Eigenschaft korrekt deserialisieren lassen?

Antwort

1

Korrekt. Wenn Sie versuchen, in eine List<ISomething> zu deserialisieren, dann wird es nicht funktionieren. Der Grund dafür ist, dass die Deserialisierungsoperation nicht weiß, welches ISom eigentlich erstellt werden soll (Sie können ein ISomething nicht initiieren, weil es keine konkrete Klasse ist). Sie müssen die Serviceschnittstelle ändern, um eine konkrete Klasse für die Liste verfügbar zu machen. (dh List<Something>).