0

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

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

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

[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

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

这可以轻松完成吗?

更新:

我试过这个:

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

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

4

2 回答 2

1

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

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

然后在使用值时:

_Matltype = _Matltype ?? _Mttype;

不幸的是,这意味着您必须为您期望的每个变化都这样做。

于 2013-07-31T21:07:36.710 回答
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; }
 }
于 2013-07-12T19:43:10.347 回答