У меня есть класс (более сложный, но упрощенный для примера), подобный этому:
public class MyClass {
public MyClass() { }
[XmlAttribute("somename")]
public String MyString { get; set; }
[XmlElement("AString")]
public List<String> TheList { get; set; }
// Other uninteresting methods and private members.
}
Сериализация Xml работает отлично. То, что я хотел бы сделать (если это не слишком безумно), это изменить этот класс, чтобы использовать дженерики, чтобы я мог использовать в «TheList» разные типы. Я хочу, чтобы имя XmlElement можно было как-то указывать для каждого экземпляра (или для каждого типа).
Идеальным было бы что-то, где имя задается при создании экземпляра. Было бы неплохо при замене макроса заменить строки параметров атрибута, но я понятия не имею, возможно ли что-либо подобное. Может быть, это будет выглядеть примерно так:
public class MyClass<T, (MagicalMacro)> {
// Some kind of constructor, methods, whatever as needed.
// MyString as above.
[XmlElement(MagicalMacro)] // This does not compile.
public List<T> TheList { get; set; }
// Etc.
}
...
MyClass<int, (MagicalMacro)> myClass = new MyClass<int, "AnInteger">();
Менее идеальным, но все же удовлетворительным было бы назвать выходное имя «TheList» в зависимости от типа T.
public class MyClass<T> {
// Same constructor and MyString as the first example.
[XmlElement(typeof(T).Name)] // This does not compile - string not constant.
public List<T> TheList { get; set; }
// Etc.
}
Спасибо.