创建包含方法的 Web 服务时出错返回 ArrayList 类型

Posted

技术标签:

【中文标题】创建包含方法的 Web 服务时出错返回 ArrayList 类型【英文标题】:Error While Creating A Web-Service That Contains A Method Return An ArrayList Type 【发布时间】: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 但发生了同样的问题。

问题是什么??

【问题讨论】:

【参考方案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 对象的数组。

以上是关于创建包含方法的 Web 服务时出错返回 ArrayList 类型的主要内容,如果未能解决你的问题,请参考以下文章

在报告服务 2008 上调用 Render 方法时出错

尝试创建新用户并在 web min 中更新用户时出错

在类库中使用 WCF 服务时出错

在 ClassLibrary 中使用 WCF 服务时出错

iOS-在表格中显示数组值时出错

“ C”三元运算符返回变量时出错