C# 从 C# 创建原型文件 class
C# create proto file from c# class
我正在尝试从我的 c# class 为一些外部合作者生成 protobuf 文件。
问题是:我有很多可为空的值(int?,double?)
但是当我这样做的时候:
string protoOutput = Serializer.GetProto<Test>();
和class
[ProtoContract]
public class Test
{
[ProtoMember(1)]
public int? TEST { get; set; }
[ProtoMember(2)]
public DateTime SDF { get; set; }
}
proto 序列化器输出是:
syntax = "proto3";
import "google/protobuf/timestamp.proto";
message Test {
int32 TEST = 1;
.google.protobuf.Timestamp SDF = 2;
}
我如何配置序列化器以获得 :
google.protobuf.Int32Value
对于我的 int? 属性
提前致谢
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
。
我正在尝试从我的 c# class 为一些外部合作者生成 protobuf 文件。 问题是:我有很多可为空的值(int?,double?)
但是当我这样做的时候:
string protoOutput = Serializer.GetProto<Test>();
和class
[ProtoContract]
public class Test
{
[ProtoMember(1)]
public int? TEST { get; set; }
[ProtoMember(2)]
public DateTime SDF { get; set; }
}
proto 序列化器输出是:
syntax = "proto3";
import "google/protobuf/timestamp.proto";
message Test {
int32 TEST = 1;
.google.protobuf.Timestamp SDF = 2;
}
我如何配置序列化器以获得 :
google.protobuf.Int32Value
对于我的 int? 属性
提前致谢
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
。