作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个像这样的类(更复杂,但简化了示例):
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.
}
谢谢。
最佳答案
属性需要文字。解决此问题的方法是使用 XmlAttributeOverrides
在运行时 配置它,并将其传递给 XmlSerializer
构造函数。但是:执行此操作时缓存并重新使用序列化程序实例,否则会泄漏动态生成的程序集。
关于c# - 如何使用泛型类为每个实例(或每个类型)设置 Xml 序列化属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6718837/
我是一名优秀的程序员,十分优秀!