私の質問はこの問題に関連しています。子から親への仮想ナビゲーションプロパティを持つPOCOクラスがあります。親には子のコレクションがあります。
public class Parent
{
public virtual List<Child> Children { get; set; }
}
public class Child
{
public string ParentID { get; set; }
[XmlIgnore]
[ForeignKey("ParentID")]
public virtual Parent Parent { get; set; }
}
さて...あなたはそれを推測しました-私はEFから来る親(すなわちプロキシ)をXmlSerializerでシリアル化しようとします。最初に、私が何らかの方法で処理するすべての不明なタイプ(動的に生成されたクラス)について不平を言います。しかし、それは「循環参照」の例外を除いて例外です。
調査の結果、XmlIgnore属性は、プロキシオブジェクトのParentプロパティへのリフレクションでは検出できないことが判明しました。
Type.GetType("System.Data.Entity.DynamicProxies.Child_2C9351FD5E156D94E5BF2C68DABFC2A956181C99A0C2E4E6B592E6373D8645ED, EntityFrameworkDynamicProxies-Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")
.GetProperty("Parent").GetCustomAttributes(typeof(XmlIgnoreAttribute), true) <-- returns 'None'
プロキシオブジェクトのタイプベースタイプは私のChildクラスです。はXmlIgnoreAttribute
継承フラグを設定せず、デフォルトはtrueであるため、これは機能するはずです。何が起こっている?
プロキシオブジェクトはその基本タイプについて嘘をついていますか?
'manual' xmlシリアル化を記述せずにこの問題を回避するにはどうすればよいですか(XmlSerializerを使用する必要があります)。
更新:XMLSerializerは、間違っているように見える属性の「継承」を尊重していないことが判明しました。それはバグですか、それとも仕様によるものですか?