Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从proto文件生成ProtoGen结构_C#_.net_Protobuf Net - Fatal编程技术网

C# 如何从proto文件生成ProtoGen结构

C# 如何从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

我们一直在使用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.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,因为我可以使用公共字段和结构,而不是属性等。