2013-10-29 41 views
0

我正在处理支持不同语言的XML文件,我想使用XDocument/XElement(使用System.Xml.Serialization)将此XML解析为C#类。 XML稍微复杂,但我想要实现的应该很简单,但我无法弄清楚。向XmlElement添加后缀C#解析器

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; } 
    } 
} 

错误: 一个属性参数必须是常量表达式,属性参数类型

什么是添加后缀的正确方法的typeof运算表达式或数组创建表达式?

回答

1

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

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

在XML中,不同的标签名称代表不同的对象类型。对于您当前的XML文档而言,最好的解决方案是您为每种受支持的语言提供了独立的类,这些类都从一个普通类继承而来(例如,WordBase)。