【问题标题】:Deserialization message contract first grpc approach反序列化消息合约优先 grpc 方法
【发布时间】:2022-01-03 21:35:31
【问题描述】:

在 grpc 合同第一种方法中,有什么方法可以将来自 proto 消息的自动生成的 c# 对象转换为自定义 C# 对象。

要反序列化的类型

class HelloRep
{
   string message { get; set; }
}

原型消息

message HelloReply {
  string message = 1;
}

客户端代码

var channel = GrpcChannel.ForAddress("https://localhost:5001");            
var client = new Greeter.GreeterClient(channel);
var reply =  client.SayHello(new HelloRequest { Name = "xx" });

正在寻找将回复转换为 HelloRep 的方法。

例如: HelloRep hello = Serializer.Deserialize<HelloRep>(reply);

【问题讨论】:

    标签: asp.net-core grpc grpc-c#


    【解决方案1】:

    我对 C# 不太熟悉。在其他语言(Golang、Python 等)中,protoc 会生成额外的字段|阻止自动转换的方法。

    使用自定义类,如果需要,您可以灵活地进行字段|方法命名和类型转换。

    【讨论】:

    • 感谢 DazWilkin 的回答,是的,即使在 c# 中它也有一个自动生成 .cs 文件的编译器。我正在寻找一种方法来自定义或不使用这个自动生成的类,而是使用我自己的类
    • 每个语言绑定都有某种形式的结构|类生成来表示语言中的服务|消息。如果您想使用特定于语言的方法,例如MarshallUnmarshal 和通过网络传送消息,您必须使用这些生成的类或与它们非常相似的东西。
    • 根据您的问题,如果您想在代码中使用自己的这些类的表示形式,则必须自己编写它们。这也是推荐的;您不要直接在代码中使用生成的类|结构。如果这样做,下次您更改原型或升级protoc 时,生成的类可能会发生微妙的变化并破坏您的代码。因此,抽象 proto 类,但您必须自己编写它们。
    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2019-08-15
    • 2020-04-30
    相关资源
    最近更新 更多