получить массив JSON в качестве аргумента в веб-сервисе - PullRequest
4 голосов
/ 06 июля 2010

Я использую веб-сервис, запрограммированный в Visual Basic .NET 3.5, для получения массива JSON, отправленного из другого приложения.

Я отправляю строку JSON, например, такую:

[{"idRecoleccion":1,"PIN":"553648138"},{"idRecoleccion":2,"PIN":"553648138"}]

И я получаю код в Visual Basic .NET следующим образом:

<WebMethod()> _
Public Function ConfirmaRecol(ByVal ArrayConfirma() As cConfirmaRecoleccion) As Boolean  
     For X = 0 To ArrayConfirma.Length -1
              ' Usage example
              ArrayConfirma(X).PIN
              ArrayConfirma(X).idRecoleccion
         End If
    Next
End Function

И я определяю класс cConfirmaRecolecciones следующим образом:

Public Class cConfirmaRecoleccion
Dim p_idRecoleccion As Integer
Dim p_PIN As String

Public Property idRecoleccion() As Integer
  Get
      Return p_idRecoleccion
  End Get
  Set(ByVal value As Integer)
      p_idRecoleccion = value
  End Set
End Property

Public Property PIN() As String
  Get
      Return p_PIN
  End Get
  Set(ByVal value As String)
      p_PIN = value
  End Set
End Property
End Class

Я просто хочу иметь возможность использовать массив из 1 целого и 1 строки, отправленный JSON, поэтому я пытаюсь использовать его по-своему.

Немного важных вещей, которые нужно знать:

  • Мне удалось использовать веб-службы с методами, которые имеют более простые аргументы, поэтому конфигурации, которые я должен использовать для веб-служб, являются правильными.

Это ошибка, которую я получаю от сервера:

{"Message":"Type \u0027System.Collections.Generic.IDictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]\u0027 is not supported for deserialization of an array.","StackTrace":"   at System.Web.Script.Serialization.ObjectConverter.ConvertListToObject(IList list, Type type, JavaScriptSerializer serializer, Boolean throwOnError, IList& convertedList)\r\n   at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n   at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n   at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType(Object o, Type type, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n   at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

Есть ли у вас, гуру, какие-либо другие предложения о том, как получить массив пользовательских объектов в Visual Basic .NET?

Любая помощь будет очень ценится!

1 Ответ

8 голосов
/ 14 июля 2010

Я нашел решение, это был правильный путь:

{"ArrayConfirma": [{"idRecoleccion":1,"PIN":"553648138"},{"idRecoleccion":2,"PIN":"553648138"}]}

Мне пришлось указать массив с именем аргумента, который получает метод веб-службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...