I подозреваю на самом деле это 2 разных сценария, но в отношении примера кода, добавленного Эндрю, это потому, что он не может выяснить (заранее), что он собирается делать с к значениям по умолчанию (по умолчанию данные обрабатываются как необязательные в приемнике ). Есть 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; }