【问题标题】:Using a generic object to return data from a webservice method?使用通用对象从 Web 服务方法返回数据?
【发布时间】:2010-11-24 14:19:55
【问题描述】:

我有一个 ASMX 网络服务,其中包含许多返回 XML 的方法。

服务返回各种不同的对象,我创建了一个包装器对象,其中包含有关请求的信息,例如:

[Serializable]
[XmlRoot("response")]
public class DtoWrapper<T>
{
    [XmlElement("error")]
    public bool Error { get; set; }

    [XmlElement("error_message")]
    public string ErrorMessage { get; set; }

    [XmlElement("success")]
    public bool Success { get; set; }

    [XmlElement("friendly_message")]
    public string FriendlyMessage { get; set; }

    [XmlArray("result")]
    [XmlArrayItem("item")]
    public List<T> Payload { get; set; }
}

现在这可以正常工作,直到我用不同的类型定义了我的第二种方法。然后当我尝试加载 ASMX 测试页面时出现此错误

来自命名空间“http://tempuri.org/”的顶部 XML 元素“响应” 引用不同的类型 MyProject.Web.webservices.DtoWrapper1[MyProject.BusinessLogic.ClassA] and MyProject.Web.webservices.DtoWrapper1[MyProject.BusinessLogic.ClassB]。 使用 XML 属性指定另一个 元素的 XML 名称或命名空间 或类型。

我尝试用[XmlType(Namespace="com.temp.A")][XmlType(Namespace="com.temp.B")] 标记我的对象,但似乎没有帮助。

有什么想法吗?我是否必须为我想使用的每种类型创建一个包装器对象?

编辑:我意识到问题实际上并不是类型参数。这是在类上指定了 [XmlRoot] 标记的事实。序列化程序将它们视为 2 种类型,但它们在同一命名空间中具有相同的根元素。

【问题讨论】:

    标签: c# generics serialization asmx


    【解决方案1】:

    你不能这样做。 XML 没有泛型的概念,XML Schema 或 SOAP 也没有。就 XML Schema 而言,如果它具有相同的元素名称和相同的命名空间,那么它就是同一件事。

    你不能有一个通用的网络服务,因为这些概念不存在。

    【讨论】:

      猜你喜欢
      • 2012-06-04
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多