gpt4 book ai didi

c# - 使用 XmlSerializer 反序列化随机/未知类型

转载 作者:可可西里 更新时间:2023-11-01 08:12:23 25 4
gpt4 key购买 nike

<分区>

我正在使用 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 实例之前将其映射到正确的类型。

有更好的方法吗?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com