2016-04-18 4 views
1

BaseModelを返すサービスメソッドがあります。これには派生クラスが多数あります。私のサービスは要求されたアイテムを得ることができる、つまりDerivedClass1 : BaseModelに解決してそれを返すことを望んでいました。もちろん、私のサービスの戻り値のタイプはBaseModelです。私は、派生クラスのリストが変化していると私はいつもこれを更新したくないので、私はどこ解決策を見つけたKnownTypeXmlInclude WCFのKnowtypesソリューションに派生したものすべて

[KnownType(typeof(DerivedClass1))] 
[DataContract] 
public class BaseModel { 
    ... 

として私BaseModel定義DerivedClass1に追加する必要がありました。この場合

[KnownType("DerivedTypes")] 
[Serializable] 
public class BaseModel { 
    ... 
    private static Type[] DerivedTypes() { 
     return (from t in Assembly.GetExecutingAssembly().GetTypes() where t.IsSubclassOf(typeof(BaseModel)) select t).ToArray(); 
    } 
    ... 

だから今、すべての派生クラスはKnownTypeとしてリストされている:私はこれを行うことができます。すばらしいです! 私は必要とされるために同じ必要がありますXmlIncludeあまりにも。私は使用しています

[System.Xml.Serialization.XmlInclude(typeof(DerivedClass1))] 

注釈。同様のことをする方法はありますか?これを行うより良い方法はありますか?どういうわけかできるか

[System.Xml.Serialization.XmlInclude("DerivedTypes")] 

ありがとう!

答えて

0

XmlSerializerを使用する場合は、コンストラクタに型のリストを渡すことができます。

var serializer = new XmlSerializer(typeof(BaseModel), BaseModel.DerivedTypes()); 
関連する問題