Bal*_*tar 5 c# datetime timestamp protocol-buffers protobuf-net
protogen.exeproto2为类型的消息字段生成此模式long:
private long _Count = default(long);
[global::ProtoBuf.ProtoMember(1, IsRequired = false, Name=@"Count", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
[global::System.ComponentModel.DefaultValue(default(long))]
public long Count
{
get { return _Count; }
set { _Count = value; }
}
Run Code Online (Sandbox Code Playgroud)
但由于proto2不包含日期时间类型(并且protobuf-net不支持proto3包含google.protobuf.Timestamp),因此不清楚如何DateTime在手动编码的 C# proto 对象中表示。
这可能是错误的:
private DateTime _When = DateTime.MinValue;
[global::ProtoBuf.ProtoMember(1, IsRequired = false, Name=@"When", DataFormat = global::ProtoBuf.DataFormat.Default)]
[global::System.ComponentModel.DefaultValue(DateTime.MinValue)]
public DateTime When
{
get { return _When; }
set { _When = value; }
}
Run Code Online (Sandbox Code Playgroud)
装饰DateTime属性以供使用的正确方法是什么protobuf-net?
这取决于您希望它在电线上的外观。如果你希望它是一个long(纪元的增量),那么:这样做。例如:
[ProtoMember(...)] public long Foo {get;set;}
Run Code Online (Sandbox Code Playgroud)
如果您希望它是long在线上的 a 和DateTime代码中的 a:请执行以下操作:
public DateTime Foo {get;set;}
[ProtoMember(...)] private long FooSerialized {
get { return DateTimeToLong(Foo); }
set { Foo = LongToDateTime(value); }
}
Run Code Online (Sandbox Code Playgroud)
如果您不在乎并且只想存储 a DateTime,请执行以下操作:
[ProtoMember(...)] public DateTime Foo {get;set;}
Run Code Online (Sandbox Code Playgroud)