Как создать объект с помощью Builder для сгенерированного класса protobuf-net в C #

1

В настоящее время я пытаюсь преобразовать следующие проекты в С#.NET для личного использования. Оба проекта схожи с тем отличием, что язык программирования. Во время преобразования я столкнулся с проблемой, пытаясь построить объект для генерируемого класса protobuf-net в С#.

Ниже приведены исходные прото файлы, которые используются для создания классов во всех проектах:

https://github.com/Akdeniz/google-play-crawler/tree/master/src/main/protobuf

Сгенерированный класс "BulkDetailsRequest" создается в следующих областях:

Реализация на Java

Создание экземпляра: https://github.com/onyxbits/Raccoon/blob/master/src/main/java/com/akdeniz/googleplaycrawler/GooglePlayAPI.java (строка 288)

Определение класса: https://raw.githubusercontent.com/onyxbits/Raccoon/master/src/main/java/com/akdeniz/googleplaycrawler/GooglePlay.java (строка 51237)

Реализация на основе Python:

Создание экземпляра: https://github.com/egirault/googleplay-api/blob/master/googleplay.py (строка 208)

Определение класса: https://github.com/egirault/googleplay-api/blob/master/googleplay_pb2.py (строка 3066)

Для моей реализации на С# я создал классы С#, используя https://code.google.com/p/protobuf-net/, используя версию protobuf-net r668.

Но нет возможности создать "пригодный для использования" экземпляр класса либо напрямую, либо с помощью построителя. Для того чтобы экземпляр класса использовался, свойство "docid" класса должно быть установлено. Может ли это быть проблемой с генератором protobuf-net или я использую его неправильно?

[global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"BulkDetailsRequest")]
  public partial class BulkDetailsRequest : global::ProtoBuf.IExtensible
  {
    public BulkDetailsRequest() {}

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

    private bool _includeChildDocs = default(bool);
    [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"includeChildDocs", DataFormat = global::ProtoBuf.DataFormat.Default)]
    [global::System.ComponentModel.DefaultValue(default(bool))]
    public bool includeChildDocs
    {
      get { return _includeChildDocs; }
      set { _includeChildDocs = value; }
    }
    private global::ProtoBuf.IExtension extensionObject;
    global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
      { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
  }
  • 1
    Поскольку это повторяющееся поле, вы просто используете список, то есть bulkDetailsRequest.docid.Add("your-doc-id");
Теги:
protocol-buffers
protobuf-net

1 ответ

1
Лучший ответ

Этот член - это список. Просто используйте .Add(...), .Clear() и т.д. И индексаторы списка, то есть list[index] = value;

Например:

obj.docid.Add("abc");
obj.docid.Add("def");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню