Deserialize tipos aleatórios / desconhecidos com XmlSerializer [duplicado]

Esta pergunta já tem uma resposta aqui:

Deserializar XML para objeto usando Dynamic 1 resposta

Estou 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?

questionAnswers(2)

yourAnswerToTheQuestion