所以我想在VS2015中用VB創建一個簡單的Web API 2。然而,我確實得到的代碼只返回一個簡單的字符串,其中Web API期望序列化數據,因此可以返回XML或JSON。無法投射System.Collections.Generic.IEnumerable類型的對象 - Web API問題
'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
下面的代碼失敗不同之處:
無法轉換類型System.Collections.Generic.IEnumerable的對象
Public Function GetValues() As IEnumerable(Of widgetModelClass)
Return widgetObj
End Function
我定義我的型號爲,如下所示
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
的充滿錯誤消息:
一個錯誤已 occurred.Unable投型 '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
2參數,CancellationToken cancellationToken) ---拋出異常的前一個位置的堆棧跟蹤結束---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext() ---從先前的位置堆棧跟蹤的結束,其中拋出異常---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext () ---拋出異常的先前位置的堆棧跟蹤結束---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務0123在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()
這個錯誤是因爲你是返回一個'widgetModelClass' ,它不是'IEnumerable(的widgetModelClass)'。你可以用單個項返回一個列表:'返回新列表(widgetModelClass)()從{widgetObj}'...但是,我很困惑這個:「下面的作品,但只是返回一個字符串,而不是它會返回:{「Name」:「bottle」,「ID」:1}「,這對我來說聽起來像是在做你想要的東西,也就是說它返回的是JSON數據。 – Mark
我不同意:正確的JSON是:[{「Name」:「bottle」,「ID」:1}]。但是,返回列表確實有效。 –
這是對象數組的JSON。沒有[]對於單個對象來說是完全有效的JSON。 – Mark