【问题标题】:How to convert C# object list to a protocol buffer list?如何将 C# 对象列表转换为协议缓冲区列表?
【发布时间】:2019-01-22 23:13:55
【问题描述】:

我正在尝试获取我的 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 ;
      }   
   }

【问题讨论】:

    标签: c# .net-core asp.net-core-2.1 protocol-buffers


    【解决方案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&lt;UserDTO&gt;,假设每个元素都是repeated Candidate,字段1。如果您想更具体地说明,您可以通过 code-gen 运行整个 proto 架构以获取完整架构 - 例如通过 protobuf-net 的protogen。点击“生成”,你会得到一个额外的CandidateList 元素,它代表根对象(而不是隐含的)。然后你会使用:

    var root = Serializer.Deserialize<CandidateList>(source);
    var userList = root.candidateLists;
    

    在这两种情况下,使用Serialize 而不是Deserialize 的相同方法可以从输入生成protobuf 数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      相关资源
      最近更新 更多