Pergunta

Basicamente, eu tenho alguns xml que eu preciso para desserializar. Na época, eu escrever o meu código, eu vou conhecer a estrutura do XML, mas eu gostaria de ser capaz de fazer mudanças simples para o XML sem ter que atualizar o código de serialização.

Exemplo:

<foo>
  <bar/>
</foo>

Eu gostaria de ser capaz de deserialize foo, mesmo se eu adicionar um nó adicional que não está definido na classe serializável attibuted.

<foo>
  <bar/>
  <extra-tag/>
</foo>
Foi útil?

Solução

Se entendi sua pergunta corretamente isso deve funcionar bem.

Dada uma classe:

[XmlRoot("foo")]
public class Foo
{
    [XmlElement("bar")]
    public string Bar;
    [XmlElement("extra-tag")]
    public string ExtraTag;
}

Então este código funciona bem:

string xml = 
@"<foo>
  <bar>bar</bar>
  <extra-tag>extra-tag</extra-tag>
</foo>";


XmlSerializer serializer = new XmlSerializer(typeof(Foo));
Foo afoo = (Foo)serializer.Deserialize(new StringReader(xml));

Mas se a sua aparência de classe como este:

[XmlRoot("foo")]
public class Foo
{
    [XmlElement("bar")]
    public string Bar;
}

o código continua a trabalhar

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top