我正在处理支持不同语言的XML文件,我想使用XDocument / XElement(使用System.Xml.Serialization)将此XML解析为C#类。 XML有点复杂,但我想要实现的应该很简单,但我无法理解。
Basix XML示例:
<root>
<word_EN>Hello</word_EN>
<word_DE>Hallo</word_DE>
<word_FR>Bonjour</word_FR>
<root>
我希望我的解析器看起来像:
[XmlRoot("root")]
public class Root
{
[XmlElement("word_" + LanguageSetting.SUFFIX)]
public string word { get; set; }
}
我想从另一个类中获取后缀,我希望能够更改它。我可以将后缀设置为const字符串,但我无法更改它。使用全局变量也不起作用。
static class LanguageSetting
{
private static string _suffix = "EN";
public static string SUFFIX
{
get { return _suffix; }
set { _suffix = value; }
}
}
错误: 属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式
添加后缀的正确方法是什么?
答案 0 :(得分:1)
这样做的正确方法是将您的语言后缀作为word
元素的XML属性,但这对您来说可能是不可能的。
您收到此错误,因为必须在属性修饰中使用编译时常量。 LanguageSetting.Suffix
是静态的,但不是常量。请尝试使用const
关键字。
在XML中,不同的标记名称表示不同的对象类型。当前XML文档的最佳解决方案是为每种受支持的语言提供单独的类,所有这些类都继承自公共类(例如。WordBase
)。