gpt4 book ai didi

c# - 如何使用泛型类为每个实例(或每个类型)设置 Xml 序列化属性

转载 作者:行者123 更新时间:2023-11-30 18:03:54 25 4
gpt4 key购买 nike

我有一个像这样的类(更复杂,但简化了示例):

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com