Как преобразовать список объектов C# в список буферов протокола?
Я пытаюсь получить список своих объектов userDTO и преобразовать его в список кандидатов protobuf, но я не могу понять, как это сделать
C# объект
public class UserDTO
{
public string UserNumber { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserId { get; set; }
public string EmailId { get; set; }
}
Protobuf
message Candidate {
string userNumber = 1;
string userId = 2;
string firstName = 3;
string lastName = 4;
string emailId = 5;
}
message CandidateList{
repeated Candidate candidateList = 1;
}
Функция списка (это не полностью)
public CandidateList GetUsersRpc()
{
List<UserDTO> userList = _repository.GetUsersRpc();
if (userList.Count > 0)
{
foreach (var user in userList)
{
}
}
return ;
}
}
1 ответ
Вполне возможно, что я неправильно понимаю вопрос здесь, так что не стесняйтесь поправлять меня в любых частях, которые я неправильно понял.
Если мы используем 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, чтобы получить полную схему - например, через protobuf-net. protogen
, Нажмите "Создать", и вы получите дополнительный CandidateList
элемент, который представляет корневой объект (а не неявный). Тогда вы бы использовали:
var root = Serializer.Deserialize<CandidateList>(source);
var userList = root.candidateLists;
В обоих случаях одинаковый подход с Serialize
вместо Deserialize
будет работать для генерации протобуф данных из ввода.