Supponiamo che io ho il seguente (banalmente semplice) classe di base:Posso applicare un attributo a un membro ereditato?
public class Simple
{
public string Value { get; set; }
}
Ora voglio fare quanto segue:
public class PathValue : Simple
{
[XmlAttribute("path")]
public string Value { get; set; }
}
public class ObjectValue : Simple
{
[XmlAttribute("object")]
public string Value { get; set; }
}
Ma senza realmente ridefinire la proprietà. Voglio applicare attributi ai membri della classe base. È possibile?
Il vero problema è che nel mio meccanismo di serializzazione da/a XML (che funziona brillantemente btw), trovo molti elementi simili in cui solo i nomi degli attributi differiscono (non sono coerenti, e io non t controllare il formato). In questo momento ho bisogno di creare una classe diversa per ogni elemento del genere, mentre sono uguali al 100% (a parte gli attributi).
Non credo sia possibile, ma potresti non saperlo mai.
UPDATE:
ho provato l'approccio di Marc, ma senza successo:
public class Document
{
public PathValue Path;
public ObjectValue Object;
}
class Program
{
static void Main(string[] args)
{
var doc = new Document()
{
Path = new PathValue() { Value = "some path" },
Object = new ObjectValue() { Value = "some object" }
};
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
overrides.Add(typeof(PathValue), "Value", new XmlAttributes() { XmlAttribute = new XmlAttributeAttribute("path") });
overrides.Add(typeof(ObjectValue), "Value", new XmlAttributes() { XmlAttribute = new XmlAttributeAttribute("object") });
XmlSerializer serializer = new XmlSerializer(typeof(Document), overrides);
serializer.Serialize(Console.Out, doc);
Console.WriteLine();
Console.ReadLine();
}
}
... non fa il trucco.
Penso che tu intendessi ereditare da Semplice. – Noldorin
Questo significa che un singolo file XML può contenere sia e elementi, che dovrebbero essere tutti serializzare a una classe il valore con una proprietà del valore? –
Groo
Dovrebbero serializzare sulla classe derivata, ovviamente, e il nome dell'elemento stesso dipende da dove è usato, ma sì, questa è l'idea generale. Inoltre, nella mia richiesta, è usato più comunemente per scrivere il codice XML piuttosto che leggerlo in –