So versuche ich, eine einfache Web-API 2 mit VB in VS2015 zu erstellen. Jedoch der Code, den ich funktionierte, gibt nur eine einfache Zeichenkette zurück, wo die Web API serialisierte Daten erwartet, also könnte XML oder JSON zurückgegeben werden.Kann Objekt des Typs System.Collections.Generic.IEnumerable nicht umwandeln - Web-API-Problem
'Here I initialize and populate my object
Public widgetObj As New widgetModelClass("bottle", 1)
' Below kind of works, but simply returns a string **instead** of
' the serialized data for XML or JSON the Web API should return.
' it returns: {"Name":"bottle","ID":1}
Public Function GetValues() As widgetModelClass
Return widgetObj
End Function
Der Code unten nicht mit Ausnahme:
Unable System.Collections.Generic.IEnumerable
Public Function GetValues() As IEnumerable(Of widgetModelClass)
Return widgetObj
End Function
Ich habe definiert mein Objekt vom Typ werfen Modellklasse wie folgt
Public Class widgetModelClass
Public Sub New(ByVal name As String, ByVal id As Integer)
Me.Name = name
Me.ID = id
End Sub
Private m_Name As String
Public Property Name() As String
Get
Return m_Name
End Get
Set
m_Name = Value
End Set
End Property
Private m_ID As Integer
Public Property ID() As Integer
Get
Return m_ID
End Get
Set
m_ID = Value
End Set
End Property
End Class
Die vollständige Fehlermeldung:
ein Fehler occurred.Unable gegossen Objekt vom Typ 'TestApp.widgetModelClass' ‚System.Collections.Generic.IEnumerable
1[TestApp.widgetModelClass]'.</ExceptionMessage><ExceptionType>System.InvalidCastException</ExceptionType><StackTrace> at lambda_method(Closure , Object , Object[]) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary
Typ 2 Argumente, CancellationToken cancellationToken) --- Ende des Stack-Trace von früheren Speicherort, wo Ausnahme ausgelöst wurde --- um System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task Aufgabe) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) bei System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext() --- Ende des Stack-Trace aus früheren Stelle, wo Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Aufgabe Aufgabe) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) bei System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext() --- Ende des Stack-Trace vom vorherigen Speicherort, an dem die Ausnahme ausgelöst wurde --- unter System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task Aufgabe) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) bei System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()
Der Fehler ist, weil Sie eine einzelne 'widgetModelClass' zurückkehren , was kein 'IEnumerable (Of widgetModelClass)' ist.Du könntest eine Liste mit dem einzigen Item zurückgeben: 'Neue Liste (von widgetModelClass)() Von {widgetObj}' ... jedoch bin ich dadurch verwirrt: "Beliebige Art funktioniert, aber gibt einfach eine Zeichenkette statt der serialisierte Daten für XML oder JSON sollte die Web-API zurückgeben, es gibt zurück: {"Name": "bottle", "ID": 1} ", was für mich klingt, als ob es genau das tut, was Sie wollen, dh es gibt JSON zurück Daten. – Mark
Ich stimme nicht zu: richtige JSON ist: [{"Name": "Flasche", "ID": 1}]. Die Rückgabe der Liste funktioniert jedoch. –
Das ist JSON für ein Array von Objekten. Ohne [] ist JSON für ein einzelnes Objekt einwandfrei gültig. – Mark