【问题标题】:Error While Creating A Web-Service That Contains A Method Return An ArrayList Type创建包含方法的 Web 服务时出错返回 ArrayList 类型
【发布时间】:2012-11-15 10:44:19
【问题描述】:

我已经创建了一个 Web 服务,看起来像

Public Class NameAndvalue
    Public name As String
    Public value As String
End Class
<WebMethod()> _
Public Function ReturnNames_1() As ArrayList
    Dim names As New List(Of NameAndvalue)
    Dim nv As NameAndvalue
    nv = New NameAndvalue With {.name = "AAA", .value = "1"} : names.Add(nv)
    nv = New NameAndvalue With {.name = "BBB", .value = "2"} : names.Add(nv)
    nv = New NameAndvalue With {.name = "CCC", .value = "3"} : names.Add(nv)
    Dim Arr As ArrayList = New ArrayList(names)
    Return Arr
End Function

当我在浏览器中调用时(给我一个错误...)

System.InvalidOperationException:生成错误 XML 文档。 ---> System.InvalidOperationException:类型 TMR.AndroidMethods+NameAndvalue 不是预期的。使用 XmlInclude 或 SoapInclude 属性来指定未知的类型 静态的。在 System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(字符串 名称、字符串 ns、对象 o、布尔 xsiType)在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(字符串 n, String ns, Object o, Boolean isNullable, Boolean needType) at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write2_ArrayOfAnyType(对象 o) 在 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayListSerializer.Serialize(对象 objectToSerialize,XmlSerializationWriter 作家)在 System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, 对象 o、XmlSerializerNamespaces 命名空间、字符串 encodingStyle、 String id) --- 内部异常堆栈跟踪结束 --- at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, 对象 o、XmlSerializerNamespaces 命名空间、字符串 encodingStyle、 字符串 id) 在 System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter、Object o、XmlSerializerNamespaces 命名空间)在 System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse 响应,流输出流,对象返回值)在 System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(对象 [] returnValues,流输出流)在 System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] 返回值)在 System.Web.Services.Protocols.WebServiceHandler.Invoke()

当我从方法返回 list(of string) 时,我知道这个错误 因此,我将返回值从 List(Of String) 更改为 ArrayList 但发生了同样的问题。

问题是什么??

【问题讨论】:

    标签: asp.net web-services arraylist


    【解决方案1】:

    尝试改用List(Of NameAndvalue)。下面的例子

    <WebMethod()> _
    Public Function HelloWorld() As List(Of NameAndvalue)
        Dim names As New List(Of NameAndvalue)
        Dim nv As NameAndvalue
        nv = New NameAndvalue With {.name = "AAA", .value = "1"} : names.Add(nv)
        nv = New NameAndvalue With {.name = "BBB", .value = "2"} : names.Add(nv)
        nv = New NameAndvalue With {.name = "CCC", .value = "3"} : names.Add(nv)
    
        Return names
    End Function
    

    返回

    <?xml version="1.0" encoding="utf-8"?>
    <ArrayOfNameAndvalue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
      <NameAndvalue>
        <name>AAA</name>
        <value>1</value>
      </NameAndvalue>
      <NameAndvalue>
        <name>BBB</name>
        <value>2</value>
      </NameAndvalue>
      <NameAndvalue>
        <name>CCC</name>
        <value>3</value>
      </NameAndvalue>
    </ArrayOfNameAndvalue>
    

    【讨论】:

    • 谢谢,但你知道我如何从 Android 接收到这个List(OF ...) 吗?还是来自 VB.NET 应用程序?
    • List(OF...) 被序列化为对象数组NameAndValue。我无法通过 Java 对其进行测试,但是在 VB.NET 中,当您在项目中添加服务引用时,将生成必要的代码。然后您的调用将类似于 Dim names() = svc.HelloWorld(),其中名称将是 NameAndValue 对象的数组。
    猜你喜欢
    • 2014-04-23
    • 2010-10-27
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多