Это общая особенность сериализаторов на основе контракта, включая XmlSerializer
и т. Д. (Т. Е. Те, которые не включают метаданные типа для каждого объекта).
Есть несколько вещей, которые делают это сложно:
- во время десериализации, какой тип он создаст для
A.B
?
- во время сериализации, «что является текущим объектом», имеет мало отношения к контракту
- в частности, становится очень грязно, если тип реализует несколько интерфейсов
Это сценарий, для которого я хочу, чтобы что-то работало в "v2" (но, возможно, не совсем для релиза); Я думаю:
- либо
A.B
должен быть ненулевым для начала (т. Е. A
определяет тип A.B
), либо где-то должна быть указана реализация по умолчанию
- интерфейс на основе взаимоисключающих и наследуемых; при использовании интерфейсов не может быть поддержки наследования
- все использование интерфейса будет осуществляться через свойства, а не поля (очевидно)
В качестве альтернативы и, возможно, более подходящего для представленного сценария, мы могли бы использовать что-то вроде [ProtoInclude]
для указания конкретных типов.
Но в этих пределах я думаю, что что-то возможно. Но не сегодня.