我可以将两个XmlElement映射到同一个字符串吗
本文关键字:映射 同一个 字符串 XmlElement 两个 我可以 | 更新日期: 2023-09-27 18:22:05
我有一个从电子表格中动态创建的xml字符串。有两列经常被用户贴错标签(是的,我们有一个模板,大多数时候都使用)。
我将该字符串序列化为自定义对象。
我想解释一下常见的错误。我已经用我的序列化程序尝试了以下操作:
[XmlElement("MATTYPE")]
[XmlElement("MATLTYPE")]
public string MATLTYPE { get; set; }
[XmlElement("DEPTID")]
[XmlElement("WORKCENTER")]
public string WORKCENTER { get; set; }
理想情况下,<MATTYPE>
或<MATLTYPE>
将映射到MATLTYPE
字符串。与<DEPTID>
相同或<WORKCENTER>
映射到WORKCERNTER
这两个元素不会存在于同一个文件中,但其中一个可能存在。
这容易做到吗?
更新:
我试过这个:
[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;
如果我不能从一开始就截取它,我想最好将此更改应用于集合中的每个对象,而不是逐行。
我认为您必须为您期望的变体创建一个字符串,然后根据可用值重置所需的字符串,如下所示:
[XmlElement("MATTYPE")]
public string _Mttype { get; set; }
[XmlElement("MATLTYPE")]
public string _Matltype { get; set; }
然后在使用值时:
_Matltype = _Matltype ?? _Mttype;
不幸的是,这意味着你将不得不为你期望的每一个变化做这件事。
我不认为使用属性有一个简单的解决方案,如果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; }
}