私は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「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を入力するタイプ 'TestApp.widgetModelClass' のオブジェクトをキャストします引数、CancellationToken cancellationToken) ---例外がスローされた前の場所からのスタックトレースの終了--- でSystem.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク 例外がスローされた System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNextで System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotificationでタスク)(タスク タスク)() ---以前の位置からスタックトレースの終わり--- System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNextでSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク タスク)で System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク タスク)で() ---例外がスローされた前の場所からのスタックトレースの終了--- でSystem.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク0123あなたのサンプルで System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()
あなたは、単一の 'widgetModelClass'が戻ってきているため、エラーがありますこれは 'IEnumerable(Of widgetModelClass)'ではありません。あなたは単一の項目でリストを返すことができます: 'Return new List(Of widgetModelClass)()From {widgetObj}' ...しかし、私はこのことで混乱します: "以下のような作品です。 {"Name": "bottle"、 "ID":1} "を返します。これは、JSONを返すJSONを返します。データ。 – Mark
私は同意しません。適切なJSONは[{"Name": "bottle"、 "ID":1}]です。しかし、リストを返すことは機能します。 –
これはオブジェクトの配列のJSONです。 []がなければ、単一のオブジェクトに対して完全に有効なJSONです。 – Mark