我试图从 webmethod 返回 list<object> 但给出错误
Posted
技术标签:
【中文标题】我试图从 webmethod 返回 list<object> 但给出错误【英文标题】:i m trying to return list<object> from webmethod but gives error 【发布时间】:2011-02-17 02:40:21 【问题描述】:System.InvalidOperationException:生成 XML 文档时出错。 ---> System.InvalidOperationException:类型 WebService.Property.Property_Users 不是预期的。使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型。 在 System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(字符串名称,字符串 ns,对象 o,布尔 xsiType) 在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(字符串 n,字符串 ns,对象 o,布尔 isNullable,布尔需要类型) 在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write8_ArrayOfAnyType(对象 o) 在 Microsoft.Xml.Serialization.GeneratedAssembly.ListOfObjectSerializer.Serialize(对象 objectToSerialize,XmlSerializationWriter 编写器) 在 System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,对象 o,XmlSerializerNamespaces 命名空间,字符串 encodingStyle,字符串 id) --- 内部异常堆栈跟踪结束 --- 在 System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,对象 o,XmlSerializerNamespaces 命名空间,字符串 encodingStyle,字符串 id) 在 System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter,Object o,XmlSerializerNamespaces 命名空间) 在 System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter,对象 o) 在 System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse 响应,流 outputStream,对象 returnValue) 在 System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream) 在 System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues) 在 System.Web.Services.Protocols.WebServiceHandler.Invoke()
public List<object> GetDataByModuleName(string ModuleName)
List<Property_Users> obj_UserList = new List<Property_Users>();
// performing some operation that add data to obj_UserList
List < Object > myList = new List<object>();
return ConvertToObjectList<Property_Users>(obj_UserList);
public List<Object> ConvertToObjectList<N>(List<N> sourceList)
List<Object> result = new List<Object>();
foreach (N item in sourceList)
result.Add(item as Object);
return result;
[WebMethod]
public List<object> GetDataByModuleName(string ModuleName)
List<object> obj_list = new List<object>();
obj_list = BAL_GeneralService.GetDataByModuleName(ModuleName);
return obj_list;
【问题讨论】:
【参考方案1】:序列化器无法序列化object
如果你要返回一个任意类型的列表,你必须Use the XmlInclude or SoapInclude attribute
给序列化器一个提示。
此外,列表必须是同质的,仅包含一种类型的元素。例如您不能返回包含 Foo
和 Bar
的列表
【讨论】:
还有其他方法可以做到吗,我的列表 @girish - 您可以尝试在您的方法中使用 XmlInclude 或 SoapInclude 属性。每个预期类型一个。但我不能保证序列化程序会接受它。试一试。以上是关于我试图从 webmethod 返回 list<object> 但给出错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 asp.net 中使用 JSON 和 JQuery 从 WebMethod 返回 DataTable?