在解析阶段验证和覆盖默认值

Validate and override defaults during parsing stage

使用 3.0.0-beta3 版本的 C# 原生包,根据 official documentation 默认值是在解析阶段分配的,根本无法区分值是否未传递,就我而言,这是至关重要的一点,因为我想对解码的原型实体进行某种验证,所以想知道是否有人以任何方式对数据的自定义验证或 overriding/intercepting 解析阶段有经验?

一些基本示例:

  1. 对于 int32 字段,以防它根本没有被传递,所以我想处理这种情况并引发自定义异常,而不是默认值 0
  2. 对于 int32 字段,我想强制执行允许的值范围,例如 100-1000,否则会抛出解析异常
  3. 对于字符串字段,我想在 parsing/decoding 阶段强制执行最小长度

除了在 protobuf 之上编写自定义验证层之外,您建议如何做到这一点 package/API?我仍然希望有一个扩展点,但还没有找到

验证需要在应用程序代码post-解析中完成。解析器本身没有执行此操作的挂钩。

Proto3 不区分默认值字段和未发送字段。事实上,在发送端,如果该字段已明确设置为其默认值,则不会对其进行编码。因此,无法在 proto3 中实施您的第一条规则。