WCF, wysyłanie obiektu z podklasy

0

Cześć,
używam WCF do wystawienia pewnych webserviców. Jestem nowy w C# więc proszę o wyrozumiałość.

[DataContract]
[KnownType(typeof(Sub))]
public class Base
{
    [DataMember]
    public int base;

}

[DataContract]
public class Sub : Base
{
    [DataMember]
    public int sub;
}

[ServiceContract]
[ServiceKnownType(typeof(Sub))]
public interface IServices
{
    [OperationContract]
    public void test(Base b);
}

Chcę przez XML wysyłać zarówno obiekty typu Sub jak i Base.
Wysyłam coś takiego:

   <xs:b>
    <xs:base>123</xs:base>
    <xs:sub>1234</xs:sub>
   </xs:b>

Ten XML jest deserializowany z powodzeniem, ale w obiekcie który widzę nie ma pola sub, tzn pole base jest równe 123, ale pola sub nie ma - po prostu jak się "zabrejkuję" debuggerem w pierwszej linii funkcji test to go nie widać wewnątrz obiektu. Rozumiecie zapewne, że chcę osiągnąć polimorfizm, tzn żeby deserializowało mi się to do właściwego podtypu. Sądzę, że XML może być zbyt mało precyzyjny (oczywiście wszystkie potrzebne pola (np. nagłówki, body) wysyłam także, ale tutaj pokazuję tylko "mięso".

Przegrzebałem sieć, znajdywałem podobne problemy, ale nic mi nie pomogło. Jakieś pomysły ? W szczególności czy ten XML nie powinien jakoś powiedzieć "mam świadomośc hierachi klas i Ty deserializerze wiec o tym, że wiem co robię"

0

Próbowałeś dodać [ServiceKnownType(typeof(Base))] do kontraktu serwisu ?

0
<?xml version="1.0"?>

<soapenv:Envelope
xmlns:xs="http://www.w3.org/2003/05/soap-envelope/"
soapenv:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
   <soapenv:Header/>
   <soapenv:Body>
      <xs:test>
         <xs:b>
           <xs:base>123</xs:base>
           <xs:sub>1234</xs:sub>
        </xs:b>
   </xs:test>
 </soapenv:Body>
</soapenv:Envelope>

1 użytkowników online, w tym zalogowanych: 0, gości: 1