0

スプレッドシートから動的に作成する xml 文字列があります。ユーザーによって誤ってラベル付けされることが多い列が 2 つあります (そうです、ほとんどの場合に使用するテンプレートがあります)。

その文字列をカスタム オブジェクトにシリアル化します。

よくある間違いを説明したいと思います。シリアライザーで次のことを試しました:

[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