Protobuf C#消息转换为JAVA

时间:2012-08-29 20:54:35

标签: protocol-buffers protobuf-net

我正在尝试将使用C#生成的消息转换为JAVA。作为第一步,我生成了proto文件,这就是我得到的

package Om.Business.Scanner;

message ScannerActivityDetail {
   optional string ActivityId = 1;
   optional string ContextId = 2;
   optional int32 ActivityStart = 3;
   optional bcl.DateTime ActivityEnd = 4;
}

我如何解释java世界中的bcl.DateTime?

我正在使用protobuf-net并尝试对C#app生成的消息进行反序列化。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

bcl.proto,它应该非常简单。以明显的方式创建Map<DateTime.TimeSpanScale, TimeUnit>,然后:

public static Date toDate(bcl.DateTime proto) {
    TimeUnit unit = SCALE_TO_UNIT_MAP.get(proto.getScale());
    if (unit == null) {
        throw new IllegalArgumentException("Invalid scale: " + proto.getScale());
    }
    long millis = unit.toMillis(proto.getValue());
    return new Date(millis);
}

您可以以完全相同的方式使用Joda TimeDateTime类型,因为它也有一个接受long的构造函数。 (您可能想要考虑指定哪个时区......)