При использовании наследования в protobuf.net, должны ли теги быть уникальными во всем дереве наследования? - PullRequest
1 голос
/ 23 августа 2011

Мне трудно найти четкий ответ. Насколько я понимаю из документов, теги ProtoInclude и ProtoMember в классе нужны быть уникальным, но не по всему дереву.

Это означает, что все должно быть в порядке:

[ProtoContract]
[ProtoInclude(2, typeof(Employee))]
public class Person{
    [ProtoMember(1)]
    public string Name { get; set; }
}

[ProtoContract]
public class Employee : Person{
    [ProtoMember(1)]
    public string Department{ get; set; }
}

Это правильно? Если так, что происходит, когда сериализованные свойства переопределяются?

Большое спасибо.

1 Ответ

3 голосов
/ 23 августа 2011

теги должны быть уникальными во всем дереве наследования?

Нет, они не являются.Ваше понимание верно.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» и т. Д.

...