创建包含方法的 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 类型的主要内容,如果未能解决你的问题,请参考以下文章