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 .asmx Web 服务,我需要返回最接近查询 Web 服务的客户端的地址列表
使用 Jquery AJAX 从 ASP.NET Web 服务器获取对象