ASP.NET:从 Web 服务方法返回对象列表

Posted

技术标签:

【中文标题】ASP.NET:从 Web 服务方法返回对象列表【英文标题】:ASP.NET: returning list of objects from Web Service method 【发布时间】:2014-06-28 16:14:37 【问题描述】:

我想知道如何返回对象列表而不是字符串列表?

返回一个字符串列表是可行的,但是当我用一个对象替换所有内容时它会失败..

这是我的网络服务

[WebMethod]
 public List<OpProduct> SearchProduct(string name) 
   BLProduct blProduct = new BLProduct();
   List<OpProduct> result = byproduct.SearchProducts(name);

   return result;

这是我的业务逻辑层

public List<OpProduct> SearchProducts(string name)

  List<OpProduct> result = (from item in db.OpProducts where item.Name.StartsWith(name) select item).ToList<OpProduct>();

  return result;

这是我的错误信息(抱歉,无法翻译)

System.InvalidOperationException: Er is een fout opgetreden bij het genereren van het XML 文档。 ---> System.InvalidOperationException: Er is een kringverwijzing aangetroffen tijdens het toepassen van 序列化 op een 对象 van het 类型 OpProduct。比杰 System.Xml.Serialization.XmlSerializationWriter.WriteStartElement(字符串 name, String ns, Object o, Boolean writePrefixed, XmlSerializerNamespaces xmlns) bij Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write9_OpProduct(字符串 n, String ns, OpProduct o, Boolean isNullable, Boolean needType) 比杰 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write5_OpGeheugen(字符串 n, String ns, OpGeheugen o, Boolean isNullable, Boolean needType) 比杰 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write9_OpProduct(字符串 n, String ns, OpProduct o, Boolean isNullable, Boolean needType) 比杰 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write10_ArrayOfOpProduct(对象 o) 比杰 Microsoft.Xml.Serialization.GeneratedAssembly.ListOfOpProductSerializer.Serialize(对象 objectToSerialize, XmlSerializationWriter writer) bij System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, 对象 o、XmlSerializerNamespaces 命名空间、字符串 encodingStyle、 字符串 id) --- Einde van intertern uitzonderingsstackpad --- bij System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, 对象 o、XmlSerializerNamespaces 命名空间、字符串 encodingStyle、 字符串 id) bij System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces 命名空间) bij System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse response, Stream outputStream, Object returnValue) bij System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(对象 [] returnValues, 流输出流) bij System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues) bij System.Web.Services.Protocols.WebServiceHandler.Invoke()

谁能帮帮我?

【问题讨论】:

您的 xml 序列化失败。您可以(并且应该)将其与实际的 Web 方法分开测试。我敢打赌 - OpProduct 不是可序列化的,或者某些字段包含无效字符。 【参考方案1】:

默认情况下,只有系统原始类型和这些原始类型的数组(如 int、float、double、string)可以用作返回值。

如果您想使用自己的类作为参数,您必须使用 XML 定义将它们定义为复杂类型。这是有关此的 MSDN 链接 https://msdn.microsoft.com/en-us/library/aa480498.aspx

【讨论】:

以上是关于ASP.NET:从 Web 服务方法返回对象列表的主要内容,如果未能解决你的问题,请参考以下文章

删除方法问题 - Asp.net Web API

我有一个 asp.net .asmx Web 服务,我需要返回最接近查询 Web 服务的客户端的地址列表

使用 Jquery AJAX 从 ASP.NET Web 服务器获取对象

Web API1.1 ASP.NET Web API入门

我应该通过 ASP.NET MVC 操作还是 WCF 公开 Web 方法?

ASP.NET Mvc开发之EF延迟加载