Привет всем,
У меня есть подобная иерархия классов:
Здесь два класса наследуются от одного предка (A). Причем один из наследников (C) содрежит массив элеметов A.
Другой интересный момент, класс B имеет свойство типа Object, который должен содержать простые типы, на всякий случай я их в KnownTypes добавил.
[DataContract]
[KnownType("KnownTypes")]
public class A {
[DataMember]
public String Prop1 { get; set; }
static Type[] KnownTypes() {
return new Type[] {
typeof(B),
typeof(C)
};
}
}
[DataContract]
[KnownType("KnownTypes")]
public class B : A
{
[DataMember]
public Object Prop2 { get; set; }
static Type[] KnownTypes() {
return new Type[] {
typeof(String),
typeof(Int32),
typeof(Decimal),
typeof(Boolean),
typeof(DateTime),
typeof(Guid)
};
}
}
[DataContract]
public class C : A
{
[DataMember]
public A[] Children { get; set; }
}
Сервис имеет подобный метод:
public void MyMethod(A a)
{
// ...
}
На стороне клиента сгенерированны проки классы. Создаются эксемпляры или B или С класса и вызывается метод сервиса MyMethod( b /* или с */).
Вызов до сервиса не доходит, и операция через некоторое время обрывается по таймауту.
Вопрос собственно, почему не доходит запрос? Или это иерархия классов, или нельзя использовать тип объект в классе B?
Надо сказать, что если я использую свойство типа объект в простом классе (без наследования), то запросы с этип типом доходят до сервиса, и он их успешно десериализирует.