【发布时间】:2025-11-27 08:50:01
【问题描述】:
我们一直在使用 protobuf-net ProtoGen 从 *.proto 文件生成 C# .cs 文件。我们想代替类来生成结构。例如
[DataContract]
public struct Entity1
{
[ProtoMember(1)]
public double Field1 { get; set; }
[ProtoMember(2)]
public string Field2 { get; set; }
}
我尝试使用 Serializer.GetProto 方法提取协议缓冲区,用于类和结构类型。看来,协议缓冲区(.proto)无法识别结构和类之间的区别。所以我暗示,这可能是 ProtoGen 中的一个参数,用于在从 .proto 生成的类/结构之间进行选择。该功能是否存在或者我如何解决从 *.proto 生成结构的问题?
【问题讨论】:
-
为什么你特别需要
struct? -
@Lloyd 在 .NET 中,与类相比,结构不会带来额外的运行时和内存开销。例如,考虑 SharpDX 中 3D 矢量的定义。它被声明为一个包含 3 个字段的结构,而不是一个类。部分原因是因为您希望向量列表是 blittable,但另一个原因是,如果将向量声明为类,则分配大量(例如一百万项)向量数组会产生难以置信的内存开销。
标签: c# .net protobuf-net