2013-07-12 31 views
0

我有一个从电子表格动态创建的xml字符串。有两列经常被用户错误标记(是的,我们有一个模板,使用最多的时间)。我可以将两个XmlElement映射到相同的字符串吗?

我将该字符串序列化为自定义对象。

我想说明常见的错误。我试图用我的串行如下:

[XmlElement("MATTYPE")] 
[XmlElement("MATLTYPE")] 
public string MATLTYPE { get; set; } 
[XmlElement("DEPTID")] 
[XmlElement("WORKCENTER")] 
public string WORKCENTER { get; set; } 

理想的情况下,无论是<MATTYPE>OR<MATLTYPE>会映射到MATLTYPE字符串。 同样的,<DEPTID>OR<WORKCENTER>映射到WORKCERNTER

两个元件将不在同一文件中存在,但任何可能。

这可以轻松完成吗?

UPDATE:

我已经试过这样:

[XmlElement("MATTYPE")] 
public string _Mttype { get; set; } 
[XmlElement("MATLTYPE")] 
public string _Matltype { get; set; } 
public string MATLTYPE { get { return GetMATLTYPE(); } set { matltp = value; } } 
public string GetMATLTYPE() 
{ 
    var mistakes = new [] {_Mttype, _Matltype}; 
    matltp = mistakes.FirstOrDefault(x => !string.IsNullOrEmpty(x)); 
    return matltp; 
} 

更新2:

“最好” 的解决方案,我曾是设置取其提供,然后进行肯定要么适用于我需要的字符串,当我这样做我的foreach循环:

row.WORKCENTER = row.WORKCENTER ?? row.DEPTID; 

如果我从一开始就不能拦截它,我想将这个更改应用到集合中的每个对象而不是逐行应用会很好。

回答

1

我认为你必须创建你所期望的变化的字符串,然后重置所需的字符串基于这样的可用值:

[XmlElement("MATTYPE")] 
public string _Mttype { get; set; } 
[XmlElement("MATLTYPE")] 
public string _Matltype { get; set; } 
使用值时

然后:

_Matltype = _Matltype ?? _Mttype; 

不幸的是,这意味着您必须为您所期望的每种变体做到这一点。

0

我不认为有一个简单的解决方案使用属性,如果MATTYPE和MATLTYPE都在文档中,该怎么办?

的快可能是:

[XmlElement("MATTYPE")] 
public string MATTYPE { get; set; } 
[XmlElement("MATLTYPE")] 
public string MATLTYPE { get; set; } 

public string GetMATLTYPE() 
{ 
    var mistakes = new string[] {MATTYPE, MATLTYPE} 
    return mistakes.FirstOrDefault(x => !string.IsNullOrEmpty(x)); 
} 

如果你想使用MATLTYPE:

private string _matltype; 
[XmlElement("MATTYPE")] 
public string MATTYPE { get; set; } 
[XmlElement("MATLTYPE")] 
public string MATLTYPE { 
get { return string.IsNullOrEmpty(_matltype) ? GetMATLTYPE() : _matltype ; } 
set { _matltype = value; } 
} 
+0

我需要使用'MATLTYPE'作为其他操作的最终值的字符串。如何使用'getMATLTYPE'结果来设置'MATLTYPE'值? – davids

+0

这似乎并没有工作。实际上,每当我运行调试以查看它返回的值时,当我尝试查看这些值时,它会崩溃。 – davids

相关问题