protobuf2如何与protobuf-net通信

问题描述 投票:0回答:1

在我的项目中,我使用 protobuf c 作为服务器,使用 protobuf-net 作为客户端。但是 protobuf c 无法解码客户端使用“ProtoInclude”属性的类。

这是使用protobuf-net的客户端代码

[ProtoContract]
public class MsgBase_Demo : MsgBase
{
    /// <summary>   id   </summary>
    [ProtoMember(11)]
    public float id;

    public MsgBase_Demo() 
    {
        protoName = "MsgBase_Demo";
        id = 110; 
    }
}

这是使用 protobuf c 的服务器代码

message MsgBase_Extent
{
    extend MsgBase
    {
        required MsgBase_Extent msgBase = 1000;
    }
    optional float id = 11;
}

我该如何处理这个问题。 我试过这个 https://www.indelible.org/ink/protobuf-polymorphism/仍然不起作用。也许我不应该采用继承的方式?

protocol-buffers protobuf-net protobuf-c
1个回答
0
投票

混合代码优先(您的 C#)和模式优先(您的第二个代码块)并不是一个好主意。像 Google Protocol Buffers 这样的东西的整个想法是你拥有“单一版本的事实”。如果您要混合语言,您应该有一个 .proto 文件(您的第二个代码块)并使用

protoc.exe
(或其他操作系统上的等效项)来输出您想要使用的所有不同语言的源代码。

另一件事(我想你已经知道了)是 Google 的

protoc
不会生成 C 代码。看起来您已经在使用 protobuf-c (来自您附加到问题的标签)。假设 protobuf-c 很好,您可以使用 Google 的
protoc
生成 C# 源代码,并使用 protobuf-c 的
protoc-c
生成等效的 C 代码,并使用相同的 .proto 文件作为输入。

从同一个 .proto 文件生成源代码可以避免我认为您遇到的问题,即您的 C# 代码和问题中的 .proto 没有描述同一件事。

© www.soinside.com 2019 - 2024. All rights reserved.