Frage

Zum Beispiel möchte ich entfernen oder unter Eigenschaft Attribute zu ändern oder einen neuen hinzufügen. Ist es möglich?

[XmlElement("bill_info")]
[XmlIgnore]
public BillInfo BillInfo
{
  get { return billInfo; }
  set { billInfo = value; }
}
War es hilfreich?

Lösung

(Bearbeiten - ich falsch verstehe die ursprüngliche Frage)

Sie können keine tatsächlichen Attribute hinzufügen (sie werden in die IL verbrannt); jedoch mit XmlSerializer müssen Sie nicht auf - Sie zusätzliche Attribute im Konstruktor zum XmlSerializer liefern können. Sie müssen jedoch ein wenig vorsichtig sein, um die XmlSerializer Instanz zwischenzuspeichern, wenn Sie dies tun, da sonst wird es eine zusätzliche Montage pro Instanz erstellen, die ein bisschen undicht ist. (Es tut dies nicht, wenn Sie den einfachen Konstruktor verwenden, die nur ein Type nimmt). Schauen Sie sich XmlAttributeOverrides .

Ein Beispiel:

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

Beachten Sie auch; Wenn die XML-Attribute nur illustrativ waren, dann gibt es eine zweiten Art und Weise Attribute für Dinge hinzufügen, um verwandte Datenbindung, durch die Verwendung TypeDescriptor.CreateProperty und entweder ICustomTypeDescriptor oder TypeDescriptionProvider. Viel komplexer als der XML-Fall, ich habe Angst - und nicht für alle Code funktioniert -. Nur Code, der die Komponenten-Modell verwendet

Andere Tipps

Es ist nicht möglich hinzufügen / entfernen Attribute von einer Klasse zur Laufzeit.

Es ist jedoch möglich, die Art und Weise XML-Serialisierung Arbeiten zur Laufzeit zu aktualisieren, ohne Attribute zu benötigen zu bearbeiten. Siehe Marcs Beitrag.

Bearbeiten Aktualisiert

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top