2009-03-11 4 views
5

У меня есть абстрактный класс «сервер», который я создаю в моей JavaScript в моем UI, а затем я хочу иметь метод на моем веб-службы, которая выполняет следующее:Deserialize Абстрактный класс

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 (Employee))] [KnownType (TypeOf (Чужой))] класс Contact { ... Много Оценил Phill –

+0

Будет ли это также работать с абстрактными классами, я вижу, что в вашем примере это обычный класс? Еще раз спасибо, Phill –

+0

Привет, Phil, если вы хотите, чтобы tyou мог добавить столько атрибутов KnownType, сколько вам нужно. Все зависит от глубины вашей цепи наследования. НТН. Удачи. – stephenl

Смежные вопросы