2

我们的 asp.net 核心应用程序中有一个接受dynamic对象的 POST 操作。

[HttpPost]
public Task<ActionResult> SubmitAsync(dynamic unitOfWork)

我们希望将此 POST 操作转换为 gRPC 服务器,并且希望继续dynamic在 gRPC 服务中接收对象。dynamicgRPC protobuf 文件定义中的 C# 定义等价物是什么?或者,如果这无法实现,那么接收动态对象的最佳方式是什么?

4

1 回答 1

2

这不是现在的事情。在 protobuf 方面,Any是最接近的东西,但我还没有在 protobuf-net 中实现它(它在我的短期添加列表中)。protobuf-net 中遗留的“动态类型”功能(发送类型元数据)正在被积极淘汰,Any成为首选路线,因为它允许跨平台使用并且没有相同的元数据依赖关系。

不过,坦率地说,我可能会说“不要这样做”;相反,更喜欢oneof; 您实际上的意思不太可能是“任何事情”-您可能只是指“我期望的这些事情之一,但我不知道是哪个”,并oneof表达了这种意图。更多:protobuf-net通过实现继承oneof,所以一个不错的选择是:

[ProtoContract]
[ProtoInclude(1, typeof(FooRequest))]
[ProtoInclude(2, typeof(BarRequest))]
public abstract class RequestBase {}

[ProtoContract]
public class FooRequest {} 
[ProtoContract]
public class BarRequest {} 
于 2020-07-17T20:31:09.023 回答