You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

gRPC Contract First模式下Proto自动生成C#对象如何转自定义C#对象

gRPC Contract First模式下Proto自动生成C#对象转自定义C#对象的实现方案

可以实现,共有三类常见实现方式,可根据自身场景选择:

1. 手动映射(推荐用于字段少的场景)

性能最高,无额外依赖,直接赋值即可,注意gRPC自动生成的C#类属性默认采用帕斯卡命名(首字母大写):

HelloRep hello = new HelloRep
{
    message = reply.Message
};

2. 借助对象映射库(推荐用于多类转换、字段多的场景)

如果项目中已经引入AutoMapper这类对象映射工具,可直接配置映射规则,框架会自动匹配名称近似的字段,无需逐行写赋值逻辑:

映射规则配置

public class GrpcMappingProfile : Profile
{
    public GrpcMappingProfile()
    {
        // 配置HelloReply到HelloRep的映射规则
        CreateMap<HelloReply, HelloRep>();
    }
}

转换代码

// ASP.NET Core 中可在服务注册时注入AutoMapper
builder.Services.AddAutoMapper(typeof(GrpcMappingProfile));

// 调用转换
HelloRep hello = _mapper.Map<HelloRep>(reply);

3. Protobuf序列化反序列化转换(你需要的类似Serializer.Deserialize的实现)

如果两个类的Protobuf结构完全一致,可通过序列化-反序列化的方式直接转换,不需要写映射规则,注意自定义类需要加上Protobuf相关特性:

先修改自定义类的特性

[ProtoContract]
class HelloRep
{
   [ProtoMember(1)]
   string message { get; set; }
}

转换代码

using var memoryStream = new MemoryStream();
// 序列化gRPC返回的原生对象
Serializer.Serialize(memoryStream, reply);
memoryStream.Seek(0, SeekOrigin.Begin);
// 反序列化为自定义对象
HelloRep hello = Serializer.Deserialize<HelloRep>(memoryStream);

内容的提问来源于stack exchange,提问作者janith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:06:07