C# 如何从proto文件生成ProtoGen结构
我们一直在使用protobuf net ProtoGen从*.proto文件生成C#.cs文件。我们希望生成结构而不是类。e、 gC# 如何从proto文件生成ProtoGen结构,c#,.net,protobuf-net,C#,.net,Protobuf Net,我们一直在使用protobuf net ProtoGen从*.proto文件生成C#.cs文件。我们希望生成结构而不是类。e、 g [DataContract] public struct Entity1 { [ProtoMember(1)] public double Field1 { get; set; } [ProtoMember(2)] public string Field2 { get; set; } } 我尝试使用方法Serializer.Get
[DataContract]
public struct Entity1
{
[ProtoMember(1)]
public double Field1 { get; set; }
[ProtoMember(2)]
public string Field2 { get; set; }
}
我尝试使用方法
Serializer.GetProto
为类和结构类型提取协议缓冲区。协议缓冲区(.proto)似乎无法识别结构和类之间的差异。所以我的意思是,这可能是ProtoGen中的一个参数,用于在类/结构之间进行选择,以便从.proto生成。该功能是否存在,或者我如何解决从*.proto生成结构的问题?目前,ProtoGen只发出类;由于数据本身是可变的,我想说这是合理的,但有两种选择:
- 编辑
以将csharp.xslt
替换为class
(或复制struct
,并使用csharp.xslt
参数通知其使用副本)-t
- “按原样”使用,并明智地使用ctrl+h(我知道技术含量低;但它会起作用)
struct
呢?@Lloyd在.NET中,与类相比,struct不会带来额外的运行时和内存开销。例如,考虑SharpDX中的3D向量的定义。它被声明为包含3个字段的结构,而不是类。一部分原因是因为您希望向量列表可以快速删除,但另一个原因是,如果将向量声明为类,则分配大量(比如一百万项)向量数组会产生难以置信的内存开销。这在最新的github源代码上仍然有效吗?尝试它,但我点击了抛出新的NotSupportedException(“带继承的结构或类中不支持IEExtensible”)代码>好的,没关系。删除结构类型上的IEExtensible似乎效果不错。我决定手工编写C代码,而不是使用protogen,因为我可以使用公共字段和结构,而不是属性等。