2009-03-11 47 views
5

Tôi có một lớp trừu tượng 'Server' mà tôi tạo ra trong JavaScript của tôi trong giao diện người dùng của tôi và sau đó tôi muốn có một phương pháp trên Web Service của tôi mà làm như sau:Deserialize Tóm tắt Lớp

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(); 
} 

Vấn đề tôi đang gặp là máy chủ không thể được deserialized vì nó là trừu tượng, tôi có cần phải có một phương pháp cho mỗi server tôi có mà thừa hưởng từ loại tức là bê tông

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(); 
} 

tôi thực sự sẽ đánh giá cao sự giúp đỡ của bạn như tôi không chắc chắn giải pháp tốt nhất là gì

Lỗi chính xác tôi nhận được là:

Trường hợp của lớp trừu tượng không thể được tạo.

Trả lời

9

WCF sẽ hỗ trợ kế thừa, nhưng bạn cần phải trang trí hợp đồng dữ liệu của mình với loại attibute đã biết. Ví dụ:

[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

Cảm ơn bạn đã trả lời, tôi có thể thêm một số KnowTypes không. tức là [DataContract] [KnownType (typeof (khách hàng))] [KnownType (typeof (Employee))] [KnownType (typeof (Alien))] lớp Contact { ... đánh giá cao nhiều Phill –

+0

Điều này cũng sẽ làm việc với các lớp Tóm tắt, tôi có thể thấy trong ví dụ của bạn đó là một lớp bình thường? Cảm ơn một lần nữa, Phill –

+0

Xin chào Phil, nếu bạn muốn bạn cần phải thêm nhiều thuộc tính KnownType như bạn cần. Tất cả phụ thuộc vào độ sâu của chuỗi thừa kế của bạn. HTH. Chúc may mắn. – stephenl