我有一个ASMX webservice,其中包含许多将返回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.DtoWrapper
1[MyProject.BusinessLogic.ClassA] and MyProject.Web.webservices.DtoWrapper
1 [MyProject.BusinessLogic.ClassB]。 使用XML属性指定另一个 元素的XML名称或命名空间 或类型。
我尝试使用[XmlType(Namespace="com.temp.A")]
和[XmlType(Namespace="com.temp.B")]
标记我的对象,但似乎没有帮助。
有什么想法吗?我是否必须为我想要使用的每种类型创建一个包装器对象?
编辑:我意识到这不是问题的类型参数。事实上,在类上指定了[XmlRoot]标记。序列化程序将它们视为两种类型,但它们在同一名称空间中具有相同的根元素。
答案 0 :(得分:0)
你不能这样做。 XML没有泛型的概念,XML Schema或SOAP也没有。就XML Schema而言,如果它具有相同的元素名称和相同的命名空间,那么它就是一样的。
您不能拥有通用Web服务,因为这些概念不存在。