是否有任何工具可以将docorated C#probuff-net类文件反向工程为.proto文件

时间:2018-01-11 18:15:37

标签: protocol-buffers

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实现中使用它。

1 个答案:

答案 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而不会有任何痛苦。