将 proto 文件应用于原始 protobuf 数据没有得到正确的 DateTime 值?

问题描述 投票:0回答:1

以下原始 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
}
c# protocol-buffers protobuf-net
1个回答
0
投票

google.protobuf.Timestamp
将时间戳存储为“UTC 纪元时间纳秒分辨率下的秒和秒的分数”。

您的 protobuf 消息和解码的 JSON 版本都是正确的,但您缺少转换为|从 C#(.NET) 本机日期时间类型的函数。

有关转换为/自google.protobuf.Timestamp的示例,请参阅此

answer

© www.soinside.com 2019 - 2024. All rights reserved.