Oyv*_*ind 13 .net c# xml serialization xmlserializer
我正在使用XmlSerializer与服务进行通信.这不是常规的SOAP服务,它有自己的XML对象类型.例如,我可能会要求一个<Capabilities>
对象,但它可能会返回一个<Exception>
.换句话说,我必须处理随机的XML文档类型.但是,我知道我必须处理哪些类型.
我想要做的是找到一个通用的方法来序列化/反序列化这些文档.问题是XmlSerializer需要在创建阶段知道类型.
这些不是封装在公共根元素中,因此[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; }
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的解决方案是使用XmlReader手动探测根元素,然后在创建XmlSerializer实例之前将其映射到正确的类型.
有没有更好的方法呢?
正如您提到的,当您请求服务时可能会返回。那么您知道如果对某种类型发出请求,那么服务可能只返回某些类型吗?
我会尝试XmlSerializer Constructor (Type, Type[]) ... 初始化 XmlSerializer 类的新实例,该实例可以将指定类型的对象序列化为 XML 文档,并将 XML 文档反序列化为指定类型的对象。如果属性或字段返回数组,则 extraTypes 参数指定可以插入到数组中的对象。
归档时间: |
|
查看次数: |
12824 次 |
最近记录: |