1

我正在尝试从我的 c# 类为一些外部合作者生成 protobuf 文件。问题是:我有很多可以为空的值(int?,double?)

但是当我这样做时:

string protoOutput = Serializer.GetProto<Test>();

与班级

[ProtoContract]
public class Test
{
    [ProtoMember(1)]
    public int? TEST { get; set; }

    [ProtoMember(2)]
    public DateTime SDF { get; set; }
}

原型序列化器输出是:

 syntax = "proto3";
import "google/protobuf/timestamp.proto";

message Test {
   int32 TEST = 1;
   .google.protobuf.Timestamp SDF = 2;
}

我如何配置序列化程序以获得:

google.protobuf.Int32Value

对于我的诠释?财产

提前致谢

4

1 回答 1

1

protobuf-net 目前没有将数据宣传为Int32Value,即使它做了:这不是int?编码的方式,所以:那会很糟糕。

然而,我们或许应该在这里做的是利用(相当​​新的)proto3 存在跟踪功能(在最后一次触摸该代码时不存在该功能)。要手动解释,这意味着:“添加optional”,即

syntax = "proto3";
import "google/protobuf/timestamp.proto";

message Test {
   optional int32 TEST = 1;
   .google.protobuf.Timestamp SDF = 2;
}

它提供了一种检测“无值”的机制,同时仍与相关编码兼容。对于今天,我会说:optional手动添加。

于 2021-07-26T09:42:01.450 回答