Как я могу изящно обрабатывать неизвестные подтипы в protobuf-net? - PullRequest
0 голосов
/ 02 марта 2019

У меня есть Color базовый класс и несколько классов производных цветов:

public class Color { }

public class Red : Color { }
public class Blue : Color { }

В моей модели типов времени выполнения я добавляю все производные цвета в качестве подтипов Color:

void AddColors(MetaType baseColorMeta, List<Type> colors)
{
    // Demonstration; the field numbers are consistent in actual code
    for (var i = 0; i < colors.Count; ++i)
      baseColorMeta.AddSubType(i, colors[i]);
}

Где-то в моем серверном приложении я сериализирую список, содержащий кучу цветов, и отправляю их по сети клиенту:

var colors = new List<Color> { new Red(), new Blue() };
MyTypeModel.Serialize(socket, colors);

Я столкнулся спроблема, когда сервер может вводить новые цвета, о которых клиент не знает, что приводит к исключению «неизвестный подтип».Это ожидается с точки зрения клиента, и он должен знать, как обращаться с этими неизвестными вещами.

Есть ли способ для меня, чтобы изящно обработать это на клиенте, или предоставить какое-то значение по умолчанию для неизвестных дочерних элементов?типы (т.е. класс UnknownColor)?

...