我有一个Web服务,它总是返回一个ReturnObject,它是我写的类:
public class ReturnObject
{
public Status Status { get; set; }
public Object Data { get; set; }
}
当我在Data中返回单个对象(如int或string等)时,这是正常的但当我想返回一个类型化对象列表时,运行Web服务的客户端作为WebReference获得此异常:
System.Web.Services.Protocols.SoapException:服务器无法处理请求。 ---> System.InvalidOperationException:生成XML文档时出错 ---> System.InvalidOperationException: 力typen System.Collections.Generic.List`1 [Transticket.Domain.Models.ApsisMailingList, Transticket.Domain,Version = 1.0.0.0,Culture = neutral, PublicKeyToken = null]] kaninteanvändasidenhärkontexten。 VID System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(字符串 name,String ns,Object o,Boolean xsiType)vid Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(字符串 n,String ns,Object o,Boolean isNullable,Boolean needType)vid Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write3_ReturnObject(字符串 n,String ns,ReturnObject o,Boolean isNullable,Boolean needType)
VID Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write6_GetListsResponse(对象[] p)vid Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer5.Serialize(对象 objectToSerialize,XmlSerializationWriter writer)vid System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o,XmlSerializerNamespaces名称空间,String encodingStyle, String id)---Slutpåstackspårningförinternaundantag ---
vid System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,Object o,XmlSerializerNamespaces名称空间,String encodingStyle,String id)vid System.Web.Services.Protocols.SoapServerProtocol.WriteReturns(对象[] returnValues,Stream outputStream)vid System.Web.Services.Protocols.WebServiceHandler.WriteReturns(对象[] returnValues)vid System.Web.Services.Protocols.WebServiceHandler.Invoke()--- Slut påstackspårningförinternaundantag ---
此异常不在Web服务中,它是在返回数据后客户端调用webservice。
如果我在那里做另一个ReturnObject并且我将类型化对象列表指定为数据,那么它运行良好。
有人知道我如何概括这一点?我一直认为List是一种Object,但看起来像一个.NET bug,或者我错过了什么?
答案 0 :(得分:2)
XmlSerializer
在输出中不包含类型信息(与BinaryFormatter
对比);因此,没有强大的反序列化方法object
,因为xml可能(非常字面)任何东西。
大多数基于合同的序列化程序(DataContractSerializer
,protobuf-net等)都是如此。
基本上:不要那样做。 object
在Web服务上使用并不是一件有用的事情,而且无法正常工作。