私のプロジェクトでは、下位互換性がある汎用デシリアライザーを構築する必要があります。例: XML は次のようになります。
<PolicyDef name = "sample" type="type1">
<Options ......>
</PolicyDef>
「タイプ」は列挙型です-PolicyTypesなど
public Enum PolicyTypes
{
type1 = 0,
type2 = 1
}
PolicyDef クラスは次のように定義されます。
[XmlRoot("PolicyDef")]
public class PolicyDef
{
private string policyName;
private PolicyTypes policyType;
public PolicyDefinition()
{
}
[XmlAttribute]
public string Name
{
get
{
return this.policyName;
}
set
{
this.policyName = value;
}
}
[XmlAttribute]
public PolicyTypes Type
{
get
{
return this.policyType;
}
set
{
this.policyType = value;
}
}
}
このアプローチの問題は、後でタイプ 1 またはタイプ 2 以外のタイプを配置すると、XMLDeserializer が例外をスローすることです。だから私はxmlのようなものを持っている場合
<PolicyDef name = "sample" type="type_new">
<Options ......>
</PolicyDef>
type_new が無効であるため、デシリアライザーはエラーをスローします。
エラーをスローするのではなく、デシリアライザープロセスにフックしてそれをキャッチし、デフォルト値を設定する方法があるかどうか疑問に思っていました。無効な値がある場合は、それを「type1」に設定します
または、この問題の処理方法に関する提案を受け入れます
感謝と敬意