Pregunta

Por ejemplo, quiero eliminar o cambiar los siguientes atributos de propiedad o agregar uno nuevo. ¿Es posible?

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

Solución

(editar - He leído mal la pregunta original)

No puede agregar atributos reales (se queman en el IL); sin embargo, con XmlSerializer no tiene que hacerlo: puede proporcionar atributos adicionales en el constructor al XmlSerializer . Sin embargo, debe tener un poco de cuidado al almacenar en caché la instancia de XmlSerializer si lo hace, ya que de lo contrario creará un ensamblaje adicional por instancia, lo cual es un poco permeable. (no hace esto si usa el constructor simple que solo toma un Type ). Mire XmlAttributeOverrides .

Para un ejemplo:

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; } }
}

Nota también; si los atributos xml eran solo ilustrativos, entonces hay una segunda forma de agregar atributos para cosas relacionadas con el enlace de datos, utilizando TypeDescriptor.CreateProperty y ICustomTypeDescriptor o TypeDescriptionProvider . Mucho más complejo que el caso xml, me temo, y no funciona para todo el código, solo el código que usa el modelo de componente.

Otros consejos

No es posible agregar / eliminar atributos de una clase en tiempo de ejecución.

Sin embargo, es posible actualizar la forma en que funciona la serialización XML en tiempo de ejecución sin necesidad de editar atributos. Ver la publicación de Marc.

EDITAR Actualizado

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top