Deserialize tipos aleatórios / desconhecidos com XmlSerializer [duplicado]
Esta pergunta já tem uma resposta aqui:
Deserializar XML para objeto usando Dynamic 1 respostaEstou usando o XmlSerializer para se comunicar com um serviço. Este não é um serviço SOAP regular, possui seus próprios tipos de objetos XML. Por exemplo, posso pedir um<Capabilities>
objeto, mas pode retornar um<Exception>
. Então, em outras palavras, eu tenho que lidar com tipos aleatórios de documentos XML. No entanto, sei com quais tipos devo lida
O que estou tentando fazer é encontrar uma abordagem genérica para serializar / desserializar esses documentos. O problema é que o XmlSerializer precisa saber o tipo no estágio de criaçã
Estes NÃO são encapsulados em um elemento raiz comum, criando uma classe base e usando o[XmlInclude]
atributo @ NÃO funciona neste caso:
[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; }
}
minha solução até agora é analisar o elemento raiz manualmente com o XmlReader e mapeá-lo para o tipo correto antes de criar uma instância do XmlSerialize
Existe alguma maneira melhor de fazer isso?