【问题标题】:receive JSON array as argument in web service在 Web 服务中接收 JSON 数组作为参数
【发布时间】:2010-07-06 00:30:52
【问题描述】:

我正在使用在 Visual Basic .NET 3.5 中编程的 Web 服务来接收从其他应用程序发送的 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

我只是希望能够使用由 JSON 发送的 1 个整数和 1 个字符串组成的数组,这就是我尝试以他的方式使用它的原因。

需要了解的一些重要事项:

  • 我已经能够使用具有更简单参数的方法的 Web 服务,因此我必须使用 Web 服务的配置是正确的。

这是服务器收到的错误:

{"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 中接收自定义对象数组,您有什么其他建议吗?

【问题讨论】:

  • Curro,请不要在标题中重复“VB.NET”之类的标签。只需将其留在标签中即可。

标签: vb.net web-services json


【解决方案1】:

我找到了解决方案,这是正确的方法:

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

我必须用 Web 服务方法正在接收的参数名称指定一个数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2013-08-10
    • 2014-10-25
    相关资源
    最近更新 更多