В настоящее время я пытаюсь преобразовать следующие проекты в С#.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); }
}
Этот член - это список. Просто используйте .Add(...)
, .Clear()
и т.д. И индексаторы списка, то есть list[index] = value;
Например:
obj.docid.Add("abc");
obj.docid.Add("def");
bulkDetailsRequest.docid.Add("your-doc-id");