私のリポジトリにはがありList<Student>
、登録にはEnrolment.StudentとEnrolment.Courseがあります。これらは、前の2つのリストの学生またはコースの1つを参照しています。 List<Course>
List<Enrolment>
リポジトリでXmlSerializerを使用すると、List<Student>
の同じ学生への参照ごとに、各学生のすべてのプロパティがシリアル化されるため、冗長データが出力されList<Enrolment>
ます。私はこれを解決するためのエレガントな方法を探しています。
デシリアライズ後、デシリアライズによって作成された重複オブジェクトインスタンスのID値を使用して参照を修正できますが、これはハックのようです。
冗長な出力を修正する1つの方法は、XmlIgnore Enrolment.StudentとEnrolment.Courseを使用して、シリアル化用にさらに2つのプロパティ(Enrolment.StudentIDとEnrolment.CourseID)を作成することです。List<Student>
ただし、逆シリアル化中は、およびの逆シリアル化の結果が利用できないため、Enrolment.StudentおよびEnrolment.Courseの参照を設定できません(AFAIK)List<Course>
。
私が考えたもう1つの方法は、オブジェクト階層の下位でシリアル化することです。各リストを個別に実行し、逆シリアル化の順序を制御します。これは実行しません。
もう1つの方法は、XmlIgnoreを使用して、それ自体の逆シリアル化が完了した後にList<Enrolment>
初期化する登録シリアル化ヘルパークラスを作成することです。List<Enrolment>
これは大変な努力のようです。
他の人は、XmlSerializerを使用して、同じオブジェクトへの複数の参照をどのようにシリアル化/逆シリアル化しますか?