将后缀添加到XmlElement C#解析器

时间:2013-10-29 08:10:26

标签: c# parsing global-variables constants xelement

我正在处理支持不同语言的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表达式或数组创建表达式

添加后缀的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这样做的正确方法是将您的语言后缀作为word元素的XML属性,但这对您来说可能是不可能的。

您收到此错误,因为必须在属性修饰中使用编译时常量。 LanguageSetting.Suffix是静态的,但不是常量。请尝试使用const关键字。

在XML中,不同的标记名称表示不同的对象类型。当前XML文档的最佳解决方案是为每种受支持的语言提供单独的类,所有这些类都继承自公共类(例如。WordBase)。