以下原始 protobuf 数据
[
{"1":"ABC"},
{"2":[{"1":1510839580}]},
{"3":1327}
]
是从以下 C# 类生成的。该项目使用 protobuf-net (https://github.com/protobuf-net/protobuf-net)。第二个字段 LastLoaded 具有当前数据时间的日期时间。
[ProtoContract]
public class DatasetStatus
{
[ProtoMember(1)]
public string Dataset { get; set; }
[ProtoMember(2)]
public DateTime? LastLoaded { get; set; }
[ProtoMember(3)]
public int LoadedRecordCount { get; set; }
}
我尝试将原始原型数据解码为可读数据。
以下proto文件用于解码原始数据:
syntax = "proto3";
import "google/protobuf/timestamp.proto";
message DatasetStatus {
string Dataset = 1;
google.protobuf.Timestamp LastLoaded = 2;
int32 LoadedRecordCount = 3;
}
它得到了以下字符串。如何将秒/纳米转换为日期时间?
{
"Dataset":"ABC",
"LastLoaded":{"seconds":"33673825011733788","nanos":5},
"LoadedRecordCount":1327
}
google.protobuf.Timestamp
将时间戳存储为“UTC 纪元时间纳秒分辨率下的秒和秒的分数”。
您的 protobuf 消息和解码的 JSON 版本都是正确的,但您缺少转换为|从 C#(.NET) 本机日期时间类型的函数。
有关转换为/自google.protobuf.Timestamp
的示例,请参阅此
answer。