c# - 如何将 C# 对象列表转换为 Protocol Buffer 列表?

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

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

原型(prototype)缓冲区

 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 ;
      }   
   }

最佳答案

我可能误解了这里的问题,所以请随时纠正我误解的任何部分。

如果我们使用 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 .如果你想让我更具体,你可以通过代码生成运行整个原型(prototype)模式以获得完整的模式 - 例如通过 protobuf-net 的 protogen .点击“生成”,你会得到一个额外的 CandidateList代表根对象的元素(而不是隐含的)。然后你会使用:

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

在这两种情况下,与 Serialize 相同的方法而不是 Deserialize将根据输入生成 protobuf 数据。

关于c# - 如何将 C# 对象列表转换为 Protocol Buffer 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54303495/

相关文章:

c# - System.ServiceModel.AddressAccessDeniedException:HTTP 无法注册 URL http::8080

c# - 依赖注入(inject)和命名记录器

c# - 使用动态特性读取 XML 结构

asp.net - 缺少 .NET Framework 模板 Visual Studio 2017

c# - 困惑 : ASP. NET Core 2 不是托管代码,但 ASP.Net Core Runtime 是做什么用的?

c# - 如何保持动态大小的控件对齐?

.Net Core appsettings.json 最佳实践 - 覆盖开发设置(反之亦然)?

asp.net-core-2.1 - 如何将 Steeltoe Dynamic Logging 与第 3 方记录器一起设置为 Serilog?

c# - Appsettings Json 中的 ILoggingBuilder 日志记录 LogLevel 似乎未在 Azure 日志流或 Blob 日志中得到确认

asp.net-core - 用于授权和身份验证的多个 JWT 承载