我正在处理一个支持不同语言的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; }
}
我想从另一个类获取后缀,我希望能够更改它。我可以将后缀设置为常量字符串,但随后我无法更改它。使用全局变量也不起作用。
static class LanguageSetting
{
private static string _suffix = "EN";
public static string SUFFIX
{
get { return _suffix; }
set { _suffix = value; }
}
}
错误:属性参数必须是属性参数类型的常量表达式、类型表达式或数组创建表达式
添加后缀的正确方法是什么?
执行此操作的正确方法是将语言后缀作为 word
元素上的 XML 属性,但这对您来说可能是不可能的。
您收到此错误是因为必须在属性修饰中使用编译时常量。 LanguageSetting.Suffix
是静态的,但不是常量。请尝试改用 const
关键字。
在 XML 中,不同的标记名称表示不同的对象类型。当前 XML 文档的最佳解决方案是每种受支持的语言都有单独的类,所有类都继承自一个公共类(例如。 WordBase
)。