теги должны быть уникальными во всем дереве наследования?
Нет, они не являются.Ваше понимание верно.Protobuf-net реализует наследование как прокладку посредством инкапсуляции производных типов, поэтому ограничение заключается в том, что теги для подтипов не должны конфликтовать с любыми другими тегами внутри этого локального типа .Итак:
// this contract is an INVALID example
[ProtoContract]
[ProtoInclude(1, typeof(Employee))]
public class Person{
[ProtoMember(1)]
public string Name { get; set; }
}
недопустимо, так как теги подтипа Employee
и свойства Name
конфликтуют.
За пределами этого типа конфликт отсутствует.Другие типы могут использовать «подтип 1», а другие типы могут использовать «свойство 1» и т. Д.