我试图弄清楚protobuf-net
是否能够生成.proto
文件,然后可以使用常规的Protobuf编译器来编译C++类。
我看了那些问题
- Protobuf-net .proto file generation for inheritance
- protobuf-net inheritance shows base class in .proto file
- Protobuf-net is incompatible with official google Protobuf for C++ (message encoding)
但是它们确实很老了,而且谈论的是V2 Protobuff语法。
我的目标是用C#编写一个类层次结构,然后使用protobuf-net
为该层次结构生成.proto
文件,然后使用官方的Google编译器基于该层次结构生成C代码。
最终结果应该具有C#和C之间的字段和数据奇偶校验,以便可以交换消息。
这可能吗?
我试着举个例子。
假设我有下面的C#代码:(可能有一些语法错误,因为我在记事本中快速输入了它)
public class Point{
public double x;
public double y;
}
public abstract class Polygon{
public List<Point> Vertices;
public Polygon(){
Vertecies = new();
}
public override ToString(){
string ans = "";
foreach(var point in Vertecies){
ans += $"({point.x},{point.y})"
}
return ans;
}
}
public class Square: Polygon{
public Sqare(Point a, Point b, Point c Point d){
this.Vertices.Add(a);
this.Vertices.Add(b);
this.Vertices.Add(c);
this.Vertices.Add(d);
}
}
public class Triangle: Polygon{
public Triangle(Point a, Point b, Point c){
this.Vertices.Add(a);
this.Vertices.Add(b);
this.Vertices.Add(c);
}
}
我想用protobuf-net
生成一个.proto
文件,用C++生成同样的层次结构。
我的问题是:如果protobuf-net
可以做到这一点?如果您认为缺少进一步的信息,请告诉我缺少什么,我将提供它。
1条答案
按热度按时间gkn4icbw1#
是也不是。Protobuf-net同时支持proto 2和proto 3,因此:这很好--而且它通常在GetSchema/GetProto中做得足够好,可以正常工作。但是,我认为您的特定模型的问题是:继承。Protobuf实际上并不执行继承。Protobuf-net可以伪造继承,但在某种程度上与
oneof
兼容(用.proto术语来说),但是:如果你想要一个能够很好地Map到跨平台使用的模型,你通常需要从.proto支持的简单模型开始,它并不包含这个。但是:注解模型,并给予它一个旋转!