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

时间:2016-05-24 11:59:29

标签: c# protocol-buffers protobuf-csharp-port proto3

使用3.0.0-beta3版本的C#本机包,根据official documentation默认值在解析阶段分配,并且无法区分是否根本没有传递值,为此我认为这是至关重要的因为我想对已解码的proto实体进行某种验证,所以想知道是否有人有过自定义数据验证或以任何方式覆盖/拦截解析阶段的经验?

一些基本的例子:

  1. 对于int32字段,如果它根本没有传递,那么而不是默认值0我想处理这种情况并引发自定义异常
  2. 对于int32字段,我想强制允许的值范围,如100-1000,否则抛出解析异常
  3. 对于字符串字段,我想在解析/解码阶段强制执行最小长度
  4. 除了在protobuf包/ API之上编写自定义验证层之外,您会建议如何做到这一点?我仍然希望有一个可扩展性点但尚未找到

1 个答案:

答案 0 :(得分:1)

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

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