Возможно, я здесь неправильно понял вопрос, поэтому не стесняйтесь поправлять меня в любых частях, которые я неправильно понял.
Если мы используем protobuf-net (я просто цитирую это из-за знакомства и удобства), то будет работать следующее:
[ProtoContract]
public class UserDTO
{
[ProtoMember(1)]
public string UserNumber { get; set; }
[ProtoMember(3)]
public string FirstName { get; set; }
[ProtoMember(4)]
public string LastName { get; set; }
[ProtoMember(2)]
public string UserId { get; set; }
[ProtoMember(5)]
public string EmailId { get; set; }
}
, тогда предположим, что у вас уже есть данные в Stream
(при использовании byte[]
, MemoryStream
будет работать):
var userList = Serializer.Deserialize<List<UserDTO>>(source);
даст вам List<UserDTO>
, делая (правильное) предположение, что каждый элемент является repeated Candidate
с полем 1
. Если вы хотите получить более конкретную информацию, вы можете запустить всю прототипную схему через code-gen, чтобы получить полную схему - например, через protogen
protobuf-net. Нажмите «Создать», и вы получите дополнительный элемент CandidateList
, который представляет корневой объект (а не неявный). Тогда вы будете использовать:
var root = Serializer.Deserialize<CandidateList>(source);
var userList = root.candidateLists;
В обоих случаях один и тот же подход с Serialize
вместо Deserialize
будет работать для генерации протобуф данных из ввода.