Kha*_*aba 3 c# protocol-buffers
我已经使用 google.proto.Timestamp 成功编译了我的 .proto 文件,并使用 protoc 生成了 .cs 文件。我遇到的唯一问题是在我的 c# 代码中初始化。
我尝试了以下方法:
.proto 文件
message teststamp
{
string Name = 1 ;
string address = 2;
google.protobuf.Timestamp _timeStamp = 3;
}
Run Code Online (Sandbox Code Playgroud)
C#文件
teststamp test = new teststamp();
test.Name = "Test";
test.address = "Test_Test_TEST"
//Example 2 : POSIX
test._timeStamp.Seconds = DateTime.Now.Second;
test._timeStamp.Nanos = DateTime.Now.Second*1000 ;
Run Code Online (Sandbox Code Playgroud)
上面的编译没有错误,但给了我这个错误:Object reference not set to an instance of an object.我尝试了一些其他方法,但由于帮助较少,它无法修复错误。
请帮我解决这个问题
谢谢
Ste*_*don 16
大多数人可能只想使用辅助方法:
using Google.Protobuf.WellKnownTypes;
var timestamp = Timestamp.FromDateTime(DateTime.UtcNow)
Run Code Online (Sandbox Code Playgroud)
任何人的完整示例。更多信息关于 Google.Protobuf.WellKnownTypes.Timestamp 的官方文档
原型
syntax = "proto3";
option csharp_namespace = "Test";
import "google/protobuf/timestamp.proto";
package OnlineGrpc;
service OnlineGrpcService {
rpc SendMessage(SendMessageRequest) returns (SendMessageResponse);
}
message SendMessageRequest{
google.protobuf.Timestamp requestDate = 1;
}
message SendMessageResponse{
google.protobuf.Timestamp responseDate = 1;
}
Run Code Online (Sandbox Code Playgroud)
C# 发送请求
var request = new SendMessageRequest();
request.requestDate = DateTime.Now.ToTimestamp();
request.requestDate = DateTimeOffset.Now.ToTimestamp();
Run Code Online (Sandbox Code Playgroud)
C# 读取响应
var response = new SendMessageResponse();
DateTimeOffset dateOffset = response.responseDate.ToDateTimeOffset();
DateTime date = response.responseDate.ToDateTime();
Run Code Online (Sandbox Code Playgroud)
这是我将现有 DateTime 实例转换为 Timestamp 的尝试:
// doc.CreateOn is a DateTime
Timestamp.FromDateTime(DateTime.SpecifyKind(doc.CreatedOn, DateTimeKind.Utc));
Run Code Online (Sandbox Code Playgroud)
时间戳是类,因此您必须首先像这样创建它:
test._timeStamp = new Timestamp() { Seconds = DateTime.Now.Second }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10332 次 |
| 最近记录: |