<分区>
我正在使用 XmlSerializer 与服务通信。这不是常规的 SOAP 服务,它有自己的 XML 对象类型。例如,我可能会要求 <Capabilities>
对象,但它可能返回 <Exception>
.因此,换句话说,我必须处理随机的 XML 文档类型。但是,我知道我必须处理哪些类型。
我正在尝试做的是找到一种通用方法来序列化/反序列化这些文档。问题是 XmlSerializer 需要在创建阶段知道类型。
这些没有封装在公共(public)根元素中,因此创建一个基类并使用 [XmlInclude]
属性在这种情况下不起作用:
[XmlInclude(typeof(Exception))]
[XmlInclude(typeof(Capabilities))]
public abstract class BaseClass
{
public BaseClass()
{
SchemaLocation = "test";
}
[XmlAttribute("schemaLocation")]
public String SchemaLocation { get; set; }
}
[XmlRoot("Exception")]
public class Exception : BaseClass
{
public Exception():base()
{
}
[XmlElement]
public String Message { set; get; }
}
[XmlRoot("Capabilities")]
public class Capabilities : BaseClass
{
public Capabilities() : base()
{}
[XmlElement]
public String ServiceName { set; get; }
}
到目前为止,我的解决方案是使用 XmlReader 手动探测根元素,然后在创建 XmlSerializer 实例之前将其映射到正确的类型。
有更好的方法吗?