Ответ 1
Я подозреваю, что на самом деле это два разных сценария, но в отношении примера кода, добавленного Эндрю, это потому, что он не может понять (заранее), что он собирается делать с учетом значений по умолчанию (по умолчанию, данные обрабатываются как дополнительные в приемнике). Есть 3 способа исправить это:
1: добавьте перечисление со значением 0 (поскольку 0 всегда является значением по умолчанию для CLI для нулей), например
public enum SiteType
{
Error = 0,
...
2: укажите, какое значение использовать по умолчанию:
[ProtoMember(10), DefaultValue(SiteType.Partition)]
public SiteType Type { get; set; }
3: сообщите движку, что ему действительно не нужно беспокоиться об этом, то есть он будет иметь значение:
[ProtoMember(10, IsRequired = true)]
public SiteType Type { get; set; }