私は.NETXmlIgnoreAttributeを理解していますか?
XmlSerializerのSerializeメソッドに、パブリックフィールドまたはパブリック読み取り/書き込みプロパティ値をシリアル化しないように指示します。
それ:
- XMLファイルに存在する場合、プロパティは逆シリアル化されますか?
- プロパティは新しいXMLファイルにシリアル化されませんか?
私が尋ねている理由は、ファイル内のプロパティを、より多くのオプションを備えた新しいプロパティに置き換えたためです。古いプロパティは単純なブールプロパティであり、新しいプロパティは列挙型です。新しいプロパティを追加する前の古いプロパティの意味に従って、新しいプロパティの値をブール値に変換するように古いプロパティを変更しました。getとsetの両方が実装されています。
これにより、新しいプロパティを設定する古いプロパティを読み取ることで新しいファイルをサイレントにアップグレードでき、シリアル化時に新しいプロパティが追加されました。
ただし、古いプロパティを新しいxmlファイルから削除したいので、タグを付けたらどうなるのか[XmlIgnore]、古いxmlファイルは引き続き適切に逆シリアル化されてファイルからそのプロパティを読み取るのか、それとも完全に無視されるのか疑問に思いました。 ?
そうでない場合、次の変更は私が望むことをしますか?
[XmlAttribute("is-list")]
[DefaultValue(false)]
public bool IsList
{
get { return false; }
set {
if (value)
ListHandling = ListHandling.All;
}
}
これにより、すべての新しいオブジェクトに対してfalseが返されます。これは、デフォルト値を指定したため無視されます。古いファイルに存在し、trueに設定すると、重要な新しいプロパティであるListHandlingプロパティが変更されます。
編集:テストの結果、両方のアプローチが私が望むことを実行しているように見えることを確認しました。ただし、上記の最初の動作が単なる実装の詳細なのか、それともドキュメントがそのように理解できるのかを知りたいので、質問は残しておきます。