Pergunta

Por exemplo, eu quero remover ou alterar abaixo atributos de propriedade ou adicionar um novo. É possível?

[XmlElement("bill_info")]
[XmlIgnore]
public BillInfo BillInfo
{
  get { return billInfo; }
  set { billInfo = value; }
}
Foi útil?

Solução

(edit - eu descaracterizou a pergunta original)

Você não pode adicionar atributos reais (eles são queimados para o IL); No entanto, com XmlSerializer você não tem que - você pode fornecer atributos adicionais no construtor ao XmlSerializer. Você, no entanto, necessidade de ser um pouco cuidadoso para armazenar em cache a instância XmlSerializer se você fizer isso, caso contrário ele irá criar uma assembleia adicional por exemplo, que é um pouco gotejante. (Não faça isso se você usar o construtor simples que só leva um Type). Olhada XmlAttributeOverrides .

Por exemplo:

using System;
using System.Xml.Serialization;
 public class Person
{
    static void Main()
    {
        XmlAttributeOverrides overrides = new XmlAttributeOverrides();
        XmlAttributes attribs = new XmlAttributes();
        attribs.XmlIgnore = false;
        attribs.XmlElements.Add(new XmlElementAttribute("personName"));
        overrides.Add(typeof(Person), "Name", attribs);

        XmlSerializer ser = new XmlSerializer(typeof(Person), overrides);
        Person person = new Person();
        person.Name = "Marc";
        ser.Serialize(Console.Out, person);
    }
    private string name;
    [XmlElement("name")]
    [XmlIgnore]
    public string Name { get { return name; } set { name = value; } }
}

Note-se também; se os atributos xml eram apenas ilustrativa, então há um segunda maneira de adicionar atributos para as coisas relacionadas aos dados de ligação, usando TypeDescriptor.CreateProperty e quer ICustomTypeDescriptor ou TypeDescriptionProvider. Muito mais complexo do que o caso xml, estou com medo - e não funciona para todo o código -. Apenas o código que usa o componente de modelo

Outras dicas

Não é possível adicionar atributos / Remover de uma classe em tempo de execução.

É possível, no entanto, atualizar a forma como as obras de serialização XML em tempo de execução sem a necessidade de atributos de edição. Veja o post de Marc.

Editar Atualização

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