1

使用 3.0.0-beta3 版本的 C# 本机包,根据官方文档,默认值是在解析阶段分配的,无法区分是否根本没有传递值,就我而言,这是至关重要的一点,因为我想做一些对解码的原型实体进行验证,所以想知道是否有人对数据的自定义验证或以任何方式覆盖/拦截解析阶段有经验?

一些基本的例子:

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

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

4

1 回答 1

1

验证需要在应用程序代码解析后完成。解析器本身没有钩子可以做到这一点。

Proto3 不区分默认值字段和未发送字段。实际上,在发送端,如果该字段已显式设置为默认值,则不会对其进行编码。所以,没有办法在 proto3 中实现你的第一条规则。

于 2016-05-24T17:46:07.313 回答