3

基本クラスのオブジェクトの配列がありますMyBase。これらのオブジェクトの一部は派生クラスのインスタンスであるため、この配列を使用してシリアル化しようとするとSystem.Xml.Serialization.XmlSerializer、派生クラスに関する苦情が表示されて失敗します。System.InvalidOperationException:タイプDerivedClassは予期されていませんでした。XmlIncludeまたはSoapInclude属性を使用して、静的に認識されていないタイプを指定します。

派生クラスをシリアル化したくない[XmlIgnore()]し、派生クラス(または[XmlInclude()]基本クラス)に入れたくないのは間違いありません!

このようなメンバーのベースのみをシリアル化するように指示する方法はありXmlSerializerますか?

[XmlElement("Items")]
public MyBase[] Items
{
    get
    {
        return items.ToArray();
    }
    set 
    {
        items = new HashSet<MyBase>(value);
    }
}
4

1 に答える 1

1

タイプでフィルタリングして、項目コレクションに対して Linq クエリを実行できます。

[XmlElement("Items")]
public MyBase[] Items
{
    get
    {
        return items.Where(item => item.GetType() == typeof(MyBase)).ToArray();
    }
    set 
    {
        items = new HashSet<MyBase>(value);
    }
}
于 2012-04-12T20:41:25.670 に答える