Так что я пытаюсь создать простой веб-API 2 с VB в VS2015. Однако код, который я получил, работает возвращает только простую строку, где Web Api ожидает сериализованные данные, чтобы можно было вернуть XML или JSON.Невозможно лить объект типа System.Collections.Generic.IEnumerable - проблема веб-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 cancelationToken) --- Конец трассировки стека из предыдущего места, где исключение было выбрано --- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Задача задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task задачи) на 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 (Задача задача) на System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task задач) на System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()
Ошибка происходит потому, что вы возвращаете один 'widgetModelClass' , который не является 'IEnumerable (Of widgetModelClass)'.Вы можете вернуть список с единственным элементом: «Возвратить новый список (из widgetModelClass)() Из {widgetObj}' ... однако я смущен этим: «Ниже вид работ, но просто возвращает строку вместо сериализованные данные для XML или JSON, которые должен вернуть Web API, он возвращает: {"Name": "bottle", "ID": 1} ", что для меня звучит так, будто оно делает именно то, что вы хотите, т.е. оно возвращает JSON данные. – Mark
Я не согласен: надлежащий JSON есть: [{"Name": "bottle", "ID": 1}]. Однако возврат списка действительно работает. –
Это JSON для массива объектов. Без [] отлично действует JSON для одного объекта. – Mark