我认为 Object 是一个未知类型的对象?不在 XmlSerializationWriter 中
我有一个网络服务,它总是返回一个 ReturnObject,它是我这样编写的一个类:
public class ReturnObject
{
public Status Status { get; set; }
public Object Data { get; set; }
}
当我在 Data 中返回单个对象(如 int 或 string 等)时,这是可以的,但是当我想返回类型化对象的列表时,客户端将 webservice 作为 WebReference 运行时出现此异常:
System.Web.Services.Protocols.SoapException:服务器无法处理请求。 ---> System.InvalidOperationException:生成 XML 文档时出错 --->系统.InvalidOperationException: 类型 System.Collections.Generic.List`1[[Transticket.Domain.Models.ApsisMailingList, Transticket.Domain,版本=1.0.0.0,文化=中性, PublicKeyToken=null]] 可以在上下文中查看。视频 System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(字符串 名称、字符串 ns、对象 o、布尔值 xsiType) vid Microsoft.Xml.Serialization.GenerateAssembly.XmlSerializationWriter1.Write1_Object(字符串 n、字符串 ns、对象 o、布尔值 isNullable、布尔值 needType) vid Microsoft.Xml.Serialization.GenerateAssembly.XmlSerializationWriter1.Write3_ReturnObject(字符串 n、字符串 ns、ReturnObject o、布尔值 isNullable、布尔值 needType)
视频 Microsoft.Xml.Serialization.GenerateAssembly.XmlSerializationWriter1.Write6_GetListsResponse(对象[] p) 视频 Microsoft.Xml.Serialization.GenerateAssembly.ArrayOfObjectSerializer5.Serialize(对象 objectToSerialize,XmlSerializationWriter 编写器)vid System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, 对象 o、XmlSerializerNamespaces 命名空间、字符串编码样式、 String id) --- Slut på stackspårning for r interna undantag ---
vid System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter、对象 o、XmlSerializerNamespaces 命名空间、字符串 编码样式,字符串 id) vid System.Web.Services.Protocols.SoapServerProtocol.WriteReturns(对象[] returnValues、流输出流)vid System.Web.Services.Protocols.WebServiceHandler.WriteReturns(对象[] 返回值)vid System.Web.Services.Protocols.WebServiceHandler.Invoke() --- 荡妇 på stackspårning for interna undantag ---
这个异常不在webservice中,而是在客户端返回数据后调用webservice时出现。
如果我在那里执行另一个 ReturnObject 并将类型化对象列表指定为数据,则效果很好。
有人知道我如何概括这一点吗?我一直认为 List 是一种 Object 类型,但看起来像是一个 .NET bug,或者我错过了什么?
I have a webservice that always returns a ReturnObject that is a class I have written like this:
public class ReturnObject
{
public Status Status { get; set; }
public Object Data { get; set; }
}
When I return a single object like an int or string etc in Data it is OK but when I want to return a list of typed objects the client that running the webservice as a WebReference getting this exception:
System.Web.Services.Protocols.SoapException: Server was unable to process request.
---> System.InvalidOperationException: There was an error generating the XML document
---> System.InvalidOperationException:
Typen
System.Collections.Generic.List`1[[Transticket.Domain.Models.ApsisMailingList,
Transticket.Domain, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null]] kan inte användas i den här kontexten. vid
System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(String
name, String ns, Object o, Boolean xsiType) vid
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(String
n, String ns, Object o, Boolean isNullable, Boolean needType) vid
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write3_ReturnObject(String
n, String ns, ReturnObject o, Boolean isNullable, Boolean needType)
vid
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write6_GetListsResponse(Object[]
p) vid
Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer5.Serialize(Object
objectToSerialize, XmlSerializationWriter writer) vid
System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,
Object o, XmlSerializerNamespaces namespaces, String encodingStyle,
String id) --- Slut på stackspårning för interna undantag ---
vid System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter
xmlWriter, Object o, XmlSerializerNamespaces namespaces, String
encodingStyle, String id) vid
System.Web.Services.Protocols.SoapServerProtocol.WriteReturns(Object[]
returnValues, Stream outputStream) vid
System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[]
returnValues) vid
System.Web.Services.Protocols.WebServiceHandler.Invoke() --- Slut
på stackspårning för interna undantag ---
This exception is not in the webservice, it's in the client call to the webservice after returning the data.
If I do another ReturnObject there and I specify a list of typed objects as data, it works well.
Someone have an idea how I generalize this? I have always thought that List is a type of Object but looks like a .NET bug, or I have missed something?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
XmlSerializer
不在输出中包含类型信息(与BinaryFormatter
对比);因此,没有可靠的方法来反序列化object
,因为 xml 可以是(字面上的)任何东西。大多数基于契约的序列化器(
DataContractSerializer
、protobuf-net 等)也是如此。基本上:不要这样做。
object
对于 Web 服务来说不是一个有用的东西,而且不能工作。XmlSerializer
does not include type information in the output (contrast withBinaryFormatter
); as such, there is no robust way of deserializingobject
, as the xml could be (quite literally) anything.The same is true of most contract-based serializers (
DataContractSerializer
, protobuf-net, etc).Basically: don't do that.
object
is not a useful thing to use on a web-service, and that cannot work.