我的服务器端有一些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 文件,并让其他人查找该共享原型消息?
答案 0 :(得分:0)
目前,没有:没有支持。我想(在这里大声思考)我可以添加类似的内容:
[ProtoContract(SchemaFile="some.proto")] // this does not exist today!
public class ClassA {
[ProtoMember(1)]
public int a { get; set; }
}
并让GetProto
在解析类型时将其视为中断 - 改为添加必要的模式导入。这可能不是特别难 - 但是:它目前不存在。您必须手动拆分架构。