datacontract シリアライザーを使用して .xml ファイルとの間でシリアル化および逆シリアル化するコードがあります。パブリック プロパティの 1 つは列挙型です。.xml が手動で編集される可能性があり、列挙であるプロパティが列挙の一部ではない値を持つ可能性があります。この場合、デシリアライズ中に datacontract が失敗します。
これはどのように処理できますか?良い解決策は何ですか?
datacontract シリアライザーを使用して .xml ファイルとの間でシリアル化および逆シリアル化するコードがあります。パブリック プロパティの 1 つは列挙型です。.xml が手動で編集される可能性があり、列挙であるプロパティが列挙の一部ではない値を持つ可能性があります。この場合、デシリアライズ中に datacontract が失敗します。
これはどのように処理できますか?良い解決策は何ですか?
これを試して:
public enum E
{
One,
Two
}
[DataContract]
public class C
{
[DataMember]
private string myField;
public E MyProperty
{
get
{
E result;
return Enum.TryParse<E>(myField, out result) ? result : default(E);
}
set { myField = value.ToString(); }
}
}
ユーザーは対応するXMLタグに何でも入れることができるので、文字列フィールドにプロパティ値を格納するよりも、最善の解決策はわかりません。
パフォーマンスが重要な場合は、列挙値を通常のプロパティに格納し、データをシリアル化/逆シリアル化する場合にのみ文字列フィールドを操作できます(OnSerializingAttribute
/を参照OnDeserializedAttribute
)。