私は現在XmlSerializer
、驚くべきことに:)、データ構造の逆シリアル化を処理するために使用しています-使用するのは非常に簡単ですが、柔軟性が犠牲になっています。現時点では、ツリーベースの構造に使用しています。はXmlSerializer
循環構造を処理しない[XmlIgnore]
ため、Parent
プロパティに追加し、ツリーに対してデシリアライゼーション後の反復を実行して、ノードの親を修正しました。
を使用してこれを処理するより良い方法はありますXmlSerializer
か、または を使用してコードを書き直す方がよいでしょうXmlReader/XmlWriter
か? 実装IXmlSerializable
はうまくいくと思いますが、かなりの量の作業のように思えますが、XmlSerializer
.
現在のデシリアライゼーション後の手順は問題ありませんが、別の XML ファイルにシリアライズする必要があるデータ構造を追加しています。基本的には、前のツリー構造のノードを参照する Parent プロパティを必要とする項目のフラット リストです。これには、デシリアライゼーション後の手順が必要であり、Parent 属性と ParentId (またはいくつかのトリック) の両方を新しいデータ構造に保持する必要があります。
では、スマートな (そして壊れにくい) アイデアはありますか? それともXmlReader/XmlWriter
そうですか?
解決
DataContractSerializer
XmlSerializer とほぼ同じシンプルさで、かなりまともなソリューションであることが判明しました。自動サイクル処理を使用しないことにしましたが、代わりに、親ノードの設定を処理するOnDeserialized装飾メソッドを定義して使用しました。そうすれば、生成された XML は標準に準拠しています。
しばらく私を混乱させたことの 1 つは、バッキング メンバーが null に設定されている状態で、デシリアライズ後にいくつかのプロパティでクラッシュが発生したことでした。デバッグすると、コンストラクターが呼び出されないことが示されました。いくつかのグーグル検索の後、説明付きのこの SO 投稿を見つけました。