【发布时间】: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.DtoWrapper
1[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