我有一个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元素“response”
引用不同类型
myproject.web.web服务.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]标记。序列化程序将它们视为2个类型,但它们在同一命名空间中具有相同的根元素。