protobuf-net:为什么生成的类会丢失setter?

时间:2016-09-29 20:43:27

标签: c# code-generation protocol-buffers protobuf-net protogen

protogen.exe文件应用于.proto文件的情况下,在哪些情况下生成C#类,其中每个属性只有一个getter(不是setter)?

package MyLibrary.MyProto                                                               

import "MyExternalType.proto";                                                                                                                          
option optimize_for = SPEED;                                                                        

message MyProto {                                                                           
    repeated MyExternalType MyProperty = 1;                                                 
}


//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

// Generated from: MyLibrary.MyProto
// Note: requires additional types generated from: MyExternalType.proto
namespace MyLibrary
{
  [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"MyProto")]
  public partial class MyProto : global::ProtoBuf.IExtensible
  {
    public MyProto() {}

    private readonly global::System.Collections.Generic.List<MyExternalType> _MyProperty = new global::System.Collections.Generic.List<MyExternalType>();
    [global::ProtoBuf.ProtoMember(1, Name=@"MyProperty", DataFormat = global::ProtoBuf.DataFormat.Default)]
    public global::System.Collections.Generic.List<MyExternalType> MyProperty
    {
      get { return _MyProperty; }
    }

    private global::ProtoBuf.IExtension extensionObject;
    global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
      { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
  }

}

1 个答案:

答案 0 :(得分:0)

这可能是正常的 - 它适用于生成的Java。

This

  

根据消息编写描述数据的.proto文件。   运行protoc以生成C#(如果您愿意,还可以生成Java / C ++)。   在应用程序中,使用与消息类型关联的构建器来创建消息实例。   将数据序列化为流。   在应用程序(或其他应用程序)的某个其他位置反序列化数据。   这个想法是构建器是可变的,而它们构建的消息是不可变的。您可以将构建器与Set *方法一起使用,这些方法可以再次返回相同的构建器,也可以使用可在对象初始化器中使用的属性。