Страницы

Поиск по вопросам

четверг, 21 марта 2019 г.

Как привести объект базового типа к производному, зная Type?

Упрощенно имею следующее:
Type type; //тип класса, производного от Request (в данном случае ConcretRequest) Request request;
Нужно сделать следующее:
ConcretRequest concretRequest = (ConcretRequest)request;
Как это сделать?
Update:
Мне это нужно для передачи данных на сервер. Объекты классов, производных от Request, являются контейнерами для данных. На стороне клиента я их сериализую и создаю объект класса, содержащего результат сериализации и тип сериализованного объекта:
public class RequestPacket { public Type type; public byte[] requestBytes; }
Сериализую RequestPacket и отправляю на сервер. На сервере десериализую в RequestPacket. Далее мне необходимо десериализовать requestBytes в экземпляр класса, производного от Request
У меня есть ощущение, что я изобретаю велосипед. Но никак не могу найти, как это можно сделать проще.


Ответ

У вас в массиве байт (а затем и в поле Request request) лежит готовый объект сразу нужного типа, который где-то далее при обработке нужно привести к конкретному типу.
Для примера, пусть это будет LoginRequest
Request request = (Request)binaryFormatter.Deserialize(memoryStream);
if (type == typeof(LoginRequest)) { LoginRequest loginRequest = (LoginRequest)request; // ... дальнейшая работа с loginRequest ... }

Комментариев нет:

Отправить комментарий