According to Problem 262: ProtoMembers with IsRequired = true are not really needed :
Currently, IsRequired primarily affects serialization , forcing it to ignore some default rules.
When IsRequired is false (the default value), the default values ββare not serialized, for example. the integer value 0 will not be serialized, the value is 1.
When IsRequired is true, all values, including default values, are serialized.
As a result of deserialization using protobuf-net, the value of the IsRequired attribute does not change. However, if you use a different implementation of Google Protocol Buffers for deserialization, you may see different behavior.
If you add a new property to an existing class and deserialize the serialized file written before the property was added, the new property simply will not be set.
source share