protobuf-net: почему в сгенерированном классе отсутствует сеттер?

При каких обстоятельствах мог protogen.exe применительно к .proto генерировать файл C# классы, где каждое свойство имеет только геттер (не сеттер)?

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 ответ

Это может быть нормально - это для сгенерированной Java.

Это говорит

Напишите файл.proto, описывающий ваши данные в терминах сообщений. Запустите protoc для генерации C# (и Java/C++, если хотите). В вашем приложении используйте конструктор, связанный с типом сообщения, для создания экземпляра сообщения. Сериализация данных в поток. В другой точке приложения (или другого приложения) десериализация данных. Идея заключается в том, что сборщики изменчивы, а создаваемые ими сообщения неизменны. Вы можете использовать компоновщики либо с методами Set *, которые снова возвращают тот же компоновщик, либо со свойствами, которые можно использовать в инициализаторах объектов.

Другие вопросы по тегам