Сбой, потому что protobuf-net не может обработать наследование, если вы не дадите ему больше подсказок ни через атрибуты, ни через тип-модель времени выполнения - по сути, ему нужно откуда-то получить номер поля (то есть вас). Я согласен признать, что, возможно, предупреждение о трассировке может быть полезным в этом случае, так как разумно ясно, что в этом сценарии наследования, вероятно, есть нечто большее, чем просто J
.
Следующее дополнение (во время выполнения) исправляет это:
RuntimeTypeModel.Default.Add(typeof(I<int>), true).AddSubType(2, typeof(J));
(единственное значение 2
заключается в том, что он не конфликтует с любыми другими полями, определенными для I<int>
).