2009-03-11 14 views
5

私は私が私のUIで私はJavaScriptで作成する抽象クラスのServer」を持っているし、私は次の処理を行い、私のWebサービスのメソッドを持つようにしたい:デシリアライズ抽象クラス

public List<Database> GetDatabases(Server server) 
{ 
    Type type = server.GetType(); 
    Server x = null; 

    if (typeof (SqlServer2005Server).Equals(type)) 
    { 
     x = new SqlServer2005Server(); 
    } 

    // Return the Databases from the server 
    return x.GetDatabases(); 
} 

問題私はそれは抽象的であるように、そのサーバーが直列化復元することはできませんされた、私は私はないですように私はあなたの助けを本当に感謝のコンクリート型すなわち

public List<Database> GetDatabases(SqlServer2005Server server) 
{ 
    // Return the Databases from the server 
    return SqlServer2005Serverx.GetDatabases(); 
} 

public List<Database> GetDatabases(OracleServer server) 
{ 
    // Return the Databases from the server 
    return SqlServer2005Serverx.GetDatabases(); 
} 

から継承し、私が持っている各サーバーのための方法を持っている必要がありますしています何が最善の解決策なのか

正確なエラーは次のとおりです。

抽象クラスのインスタンスを作成できません。

答えて

9

WCFは継承をサポートしますが、既知の型のattibuteでデータコントラクトを修飾する必要があります。たとえば、

[DataContract] 
[KnownType(typeof(Customer))] 
class Contact 
{ 
    [DataMember] 
    public string FirstName 
    {get;set;} 

    [DataMember] 
    public string LastName 
    {get;set;} 
} 
[DataContract] 
class Customer : Contact 
{ 
    [DataMember] 
    public int OrderNumber 
    {get;set;} 
} 

HTHです。

+0

返信いただきありがとうございます。いくつかのKnowTypesを追加できますか?すなわち [のDataContract] [KnownType(typeof演算(顧客))] [KnownType(typeof演算(従業員))] [KnownType(typeof演算(エイリアン))] クラスの接触 { ... ははるかに高く評価 Phill –

+0

これは抽象クラスでも動作しますか?あなたの例では通常のクラスです。おかげで再び、Phill –

+0

こんにちはフィル、必要に応じて多くのKnownType属性を追加できます。すべては、継承チェーンの深さによって異なります。 HTH。がんばろう。 – stephenl