Oi Renato, agora percebi que minha resposta estava errada.
Faça o seguinte:
Entre no site https://xmltocsharp.azurewebsites.net/
Ele permite que você converta um trecho de código XML em uma ou mais classes .NET para serem serializadas.
Então o código XML...
<Invoice>
<ID schemeID="token">351</ID>
<TypeCode>388</TypeCode>
</Invoice>
... gera 2 classes:
[XmlRoot(ElementName = "ID")]
public class ID
{
[XmlAttribute(AttributeName = "schemeID")]
public string SchemeID { get; set; }
[XmlText]
public int Value { get; set; }
}
[XmlRoot(ElementName = "Invoice")]
public class Invoice
{
[XmlElement(ElementName = "ID")]
public ID ID { get; set; }
[XmlElement(ElementName = "TypeCode")]
public int TypeCode { get; set; }
}
Note que o ID precisa ser uma classe, pois ele vai conter não só o valor dentro da tag XML, mas também o valor do atributo schemeID.
para testar, usei o código C#:
Invoice invoice = new Invoice
{
ID = new ID { SchemeID = "token", Value = 351 },
TypeCode = 388
};
XmlSerializer serializer = new XmlSerializer(typeof(Invoice));
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
using (var fileStream = new FileStream("Invoice.xml", FileMode.Create, FileAccess.Write))
{
serializer.Serialize(fileStream, invoice, ns);
}
Isso me retorna o XML:
<?xml version="1.0"?>
<Invoice>
<ID schemeID="token">351</ID>
<TypeCode>388</TypeCode>
</Invoice>
Obs.: o trecho abaixo é usado para remover o namespace do XML gerado:
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");