У меня есть базовый класс с именем PrivilegeType
и он унаследован различными другими классами. Все работает нормально, за исключением одного определенного поля под названием PossibleValues
, который не получает сериализованного/десериализованного значения.ProtoBuf не сериализует поле в унаследованном классе
определение Базовый класс:
[ProtoContract]
[ProtoInclude(13, typeof(PrivilegeEnum))]
public abstract class PrivilegeType {
...
}
PrivilegeEnum
определение:
[ProtoContract]
public class PrivilegeEnum : PrivilegeEnumLike<PrivilegeEnumValue> {
...
}
PrivilegeEnumLike<T>
определение:
[ProtoContract]
public abstract class PrivilegeEnumLike<T> : PrivilegeType<T>
{
[ProtoMember(2)]
public Dictionary<string, PrivilegeEnumValue> PossibleValues;
...
}
PrivilegeEnumValue
определение:
[ProtoContract]
public class PrivilegeEnumValue
{
[ProtoMember(1)]
public string Value;
[ProtoMember(2)]
public string Text;
[ProtoMember(3)]
public HashSet<PrivilegeEnumValue> ImpliedValues = new HashSet<PrivilegeEnumValue>();
...
}
Дело в том, что поле определяется в PrivilegeEnumLike<T>
, которая не включена в ProtoInclude
сам список, но его подклассы. Я не могу добавить PrivilegeEnumLike<>
в список ProtoInclude
, потому что, я думаю, это не имеет смысла.
Почему в мире вы, ребята, отмечаете этот вопрос как дубликат? Где в связанном вопросе это упоминается ?! «ProtoInclude» очевиден, и я знал это, прежде чем задавать этот вопрос. Пожалуйста, по крайней мере, прочитайте вопрос, прежде чем отмечать его как дубликат. – Javid