2016-09-13 78 views
0

所以我想在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()

+2

這個錯誤是因爲你是返回一個'widgetModelClass' ,它不是'IEnumerable(的widgetModelClass)'。你可以用單個項返回一個列表:'返回新列表(widgetModelClass)()從{widgetObj}'...但是,我很困惑這個:「下面的作品,但只是返回一個字符串,而不是它會返回:{「Name」:「bottle」,「ID」:1}「,這對我來說聽起來像是在做你想要的東西,也就是說它返回的是JSON數據。 – Mark

+0

我不同意:正確的JSON是:[{「Name」:「bottle」,「ID」:1}]。但是,返回列表確實有效。 –

+0

這是對象數組的JSON。沒有[]對於單個對象來說是完全有效的JSON。 – Mark

回答

1

在您的樣品任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)返回widgetObj但如果您想要的話,它不是IEnumerable(Of widgetModelClass)的實例。

你必須改變聲明返回widgetModelClass之一instanse:

Public Function GetValues() As widgetModelClass 
    Return widgetObj 
End Function 

或您的return語句返回IEnumerable(Of widgetModelClass)

Public Function GetValues() As IEnumerable(Of widgetModelClass) 
    Return New List(Of widgetModelClass)(New widgetModelClass() { widgetObj }) 
End Function 
+0

返回列表工作,我可以請求JSON和XML類型。只有JSON會在您的第一個聲明中返回。 –