Вопрос

У меня есть веб -сервис на основе WSE 3.0 и клиентское приложение Winforms, которое использует типы, определенные в ссылках этой службы.

Однако, когда я передаю экземпляр подкласса обратно в веб -сервис, хотя я явно отбрасываю обратно в оригинальный тип, я получаю страх:

Используйте атрибут xmlinclude или soapinclude, чтобы указать типы, которые не известны статически.

В отношении моего производного типа.

Сводка кода:

public class DefinedInReferenceCs
{ 
    // ... 
}

public class ClientSubclass : DefinedInReferenceCs
{
    // My extra stuff
}

public class MyClient
{
    public CallTheWebService(ClientSubclass  obj)
    {
        // obj is an instance of ClientSubclass,  cast as DefinedInReferenceCs
        svc.MyMethod((DefinedInReferenceCs)obj); 
        // Throws an exception complaining that ClientSubclass is not statically known
    }
}

Я могу обойти это, явно создав экземпляр DefinedInreferencecs и выполнив глубокую копию соответствующих полей. Есть ли способ лучше?

Это было полезно?

Решение

Поскольку XML -сериализатор использует отражение для работы с объектами, нет способа удержать его от того, что ваш базовый класс ссылается на экземпляр вашего производного класса. Да, вы должны использовать XmlInclude.

OTOH, рассматривали ли вы использование частичных классов для добавления функциональности к исходным классам прокси? Таким образом, вам вообще не понадобится полученный класс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top