C# GRPC 引用现有对象

C# GRPC Reference existing object

我对使用 GRPC 完全陌生。我有关于设置 .proto 文件的问题。 在我现有的解决方案中,例如 class:

    public class Car
{
    public int Id { get; set; }
    public string Brand { get; set; }
    public string? Type {get; set;}
}

Car class 被放置在核心项目中,因为它被解决方案周围的其他逻辑使用。但是,如果我喜欢在我的 GRPC 服务器中使用 return,是否真的有必要在 .proto 文件中再次定义它:

message CarReply {
  int32 Id = 1;
  string Brand = 2;
  string Type = 3;
}

我喜欢的是对我的 Car() class 的引用。这不可能吗?

如果你想使用普通的“契约优先”protobuf,那么是的:你需要使用模式和生成的类型——生成的类型知道如何执行序列化。

但是!可能有另一种选择; protobuf-net(和 protobuf-net.Grpc)提供了一个独立的 protobuf 实现,它支持“代码优先”用法,允许您使用现有的类型模型。

使用 protobuf-net 执行此操作的最简单 方法是注释您的模型(使用 protobuf-net 的属性或框架数据合同属性 - 第一个选项给出更多控制);例如:

[ProtoContract]
public class Car
{
    [ProtoMember(1)]
    public int Id { get; set; }
    [ProtoMember(2)]
    public string Brand { get; set; }
    [ProtoMember(3)]
    public string? Type {get; set;}
}

也可以在运行时配置所有内容,但这有点难。

这也可以完全与 gRPC 一起使用,使用接口来定义服务契约; full guidance is here