共享字段类时,GetProto的protobuf-net使用

时间:2013-12-30 12:55:39

标签: java compilation protobuf-net

我的服务器端有一些C#类(仅用于序列化),目的是在客户端使用Java反序列化。

为此,我假设我需要提取 .proto 文件,因此我使用Serializer.GetProto<T>

某些类共享某些类型,例如

[ProtoContract]
public class ClassA {
    [ProtoMember(1)]
    public int a { get; set; }
}

[ProtoContract]
public class ClassB
{
    [ProtoMember(1)]
    public int x { get; set; }

    [ProtoMember(2)]
    public ClassA a { get; set; }
}

[ProtoContract]
public class ClassC
{
    [ProtoMember(1)]
    public int z { get; set; }

    [ProtoMember(2)]
    public ClassA a { get; set; }
}

ClassB和ClassC包含ClassA类型的成员。

当我们调用Serializer.GetProto<ClassB>()时,生成的 .proto 文件包含 ClassA 的定义,当我们调用Serializer.GetProto<ClassC<>()时,生成的文件包含 ClassA 的定义。

  • 当Java开发团队使用 protoc 编译器生成 .java 类时,这会造成任何不便吗?

  • 有没有办法将共享类单独提取到另一个 .proto 文件,并让其他人查找该共享原型消息?

1 个答案:

答案 0 :(得分:0)

目前,没有:没有支持。我想(在这里大声思考)我可以添加类似的内容:

[ProtoContract(SchemaFile="some.proto")] // this does not exist today!
public class ClassA {
    [ProtoMember(1)]
    public int a { get; set; }
}

并让GetProto在解析类型时将其视为中断 - 改为添加必要的模式导入。这可能不是特别难 - 但是:它目前不存在。您必须手动拆分架构。