我试图从 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给序列化器一个提示。

此外,列表必须是同质的,仅包含一种类型的元素。例如您不能返回包含 FooBar 的列表

【讨论】:

还有其他方法可以做到吗,我的列表 不是同质的,因为我必须返回列表 @girish - 您可以尝试在您的方法中使用 XmlInclude 或 SoapInclude 属性。每个预期类型一个。但我不能保证序列化程序会接受它。试一试。

以上是关于我试图从 webmethod 返回 list<object> 但给出错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 asp.net 中使用 JSON 和 JQuery 从 WebMethod 返回 DataTable?

将数据从 WebMethod 返回到 ajax

需要帮助 - 从 WebMethod (ASP.NET) C# 调用时,MasterPage 始终返回 null

WebMethod 异步结果显示对象

急!!CXF返回类型为List<Map>的问题

ASP.NET 3.5 使用 AJAX 调用 [WebMethod] - 500 错误