C# 我可以将两个XmlElement映射到同一个字符串吗?

C# 我可以将两个XmlElement映射到同一个字符串吗?,c#,xml-serialization,C#,Xml Serialization,我有一个从电子表格动态创建的xml字符串。有两个列经常被用户错误标记(是的,我们有一个模板,大多数时间都在使用) 我将该字符串序列化为自定义对象 我想解释一下常见的错误。我已使用序列化程序尝试了以下操作: [XmlElement("MATTYPE")] [XmlElement("MATLTYPE")] public string MATLTYPE { get; set; } [XmlElement("DEPTID")] [XmlElement("WORKCENTER")] public stri

我有一个从电子表格动态创建的xml字符串。有两个列经常被用户错误标记(是的,我们有一个模板,大多数时间都在使用)

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

我想解释一下常见的错误。我已使用序列化程序尝试了以下操作:

[XmlElement("MATTYPE")]
[XmlElement("MATLTYPE")]
public string MATLTYPE { get; set; }
[XmlElement("DEPTID")]
[XmlElement("WORKCENTER")]
public string WORKCENTER { get; set; }
理想情况下,
将映射到
MATLTYPE
字符串。 与映射到
工作中心的
相同

这两个元素不存在于同一个文件中,但其中一个可能存在

这样做容易吗

更新:

我试过这个:

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

如果我不能从一开始就截取它,我想最好将此更改应用于集合中的每个对象,而不是逐行应用。

我认为使用属性并不是一个简单的解决方案,如果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; }
 }

我认为您必须为预期的变化创建一个字符串,然后根据可用值重置所需字符串,如下所示:

row.WORKCENTER = row.WORKCENTER ?? row.DEPTID;
[XmlElement("MATTYPE")]
public string _Mttype { get; set; }
[XmlElement("MATLTYPE")] 
public string _Matltype { get; set; }
然后在使用该值时:

_Matltype = _Matltype ?? _Mttype;

不幸的是,这意味着您必须为您期望的每个变体执行此操作。

我需要使用
MATLTYPE
作为其他操作的最终值字符串。如何使用
getMATLTYPE
结果设置
MATLTYPE
值?这似乎不起作用。事实上,每当我在debug中运行以查看它返回的值时,当我试图查看这些值时,它就会崩溃。