我认为 Object 是一个未知类型的对象?不在 XmlSerializationWriter 中

发布于 2024-12-08 14:47:51 字数 2075 浏览 4 评论 0原文

我有一个网络服务,它总是返回一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不寐倦长更 2024-12-15 14:47:51

XmlSerializer 不在输出中包含类型信息(与 BinaryFormatter 对比);因此,没有可靠的方法来反序列化 object,因为 xml 可以是(字面上的)任何东西。

大多数基于契约的序列化器(DataContractSerializer、protobuf-net 等)也是如此。

基本上:不要这样做。 object 对于 Web 服务来说不是一个有用的东西,而且不能工作。

XmlSerializer does not include type information in the output (contrast with BinaryFormatter); as such, there is no robust way of deserializing object, 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文