【发布时间】:2011-10-06 19:47:57
【问题描述】:
我有一个像这样的类(更复杂,但对示例进行了简化):
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">();
不太理想但仍然令人满意的是根据 T 的类型命名“TheList”输出名称。
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.
}
谢谢。
【问题讨论】:
标签: c# generics attributes xml-serialization