Bellow代码是来自protobuf-net的C#修饰代码。
using ProtoBuf;
using System;
using System.Collections.Generic;
namespace Lib
{
[Serializable]
[ProtoContract]
public class CAcct
{
[ProtoMember(1)]
public int Acct { get; set; }
[ProtoMember(2)]
public DateTime BalDt { get; set; }
//Serialize bytes to object
public byte[] Serialize()
{
return CUtility.ProtoSerialize<CAcct>(this);
}
//DeSerialize bytes to object
public CAcct DeSerialize(byte[] bytes)
{
return CUtility.ProtoDeserialize<CAcct>(bytes);
}
}
}
需要帮助生成.proto文件以便在java实现中使用它。
答案 0 :(得分:0)
DateTime
然而! DataFormat = DataFormat.WellKnown
是x-plat的皇家PITA,除非您乐意更改为新的“众所周知的”时间戳类型。如果您可以注意它会更改您的数据布局(因此会破坏兼容性) - 将[DataMember(...)]
添加到您的DateTime
。
当我第一次添加DateTime
处理时,这个“众所周知的”时间戳类型不存在,我选择了不同的布局。请注意,“众所周知”的格式需要最近的版本。
如果您将[ProtoMember(2, DataFormat = DataFormat.WellKnown)]
public DateTime BalDt { get; set; }
属性更改为:
syntax = "proto2";
package Lib;
import "google/protobuf/timestamp.proto";
message CAcct {
optional int32 Acct = 1 [default = 0];
optional .google.protobuf.Timestamp BalDt = 2;
}
然后.proto架构变为(作为proto2):
syntax = "proto3";
package Lib;
import "google/protobuf/timestamp.proto";
message CAcct {
int32 Acct = 1;
.google.protobuf.Timestamp BalDt = 2;
}
或(作为proto3);
{{1}}
其中任何一个都应该可以正常使用Java而不会有任何痛苦。