Предположим, у меня есть следующий (тривиально простой) базовый класс:
public class Simple
{
public string Value { get; set; }
}
Теперь я хочу сделать следующее:
public class PathValue : Simple
{
[XmlAttribute("path")]
public string Value { get; set; }
}
public class ObjectValue : Simple
{
[XmlAttribute("object")]
public string Value { get; set; }
}
Но без фактического переопределения свойства. Я хочу применить атрибуты к членам базового класса. Это возможно?
Реальная проблема заключается в том, что в моем механизме сериализации из / в XML (который прекрасно работает, кстати), я нахожу много похожих элементов, где отличаются только имена атрибутов (они не согласованы, и я не контролировать формат). Сейчас мне нужно создать разные классы для каждого такого элемента, тогда как они похожи на 100% одинаковые (кроме атрибутов).
Не думаю, что это возможно, но вы никогда не узнаете.
UPDATE:
Я попробовал подход Марка, но безрезультатно:
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();
}
}
... не работает.