任意类型的Protobuf消息(.NET)

4

我希望能够发送/接收任意类型的值。起初,我认为Any类型可以允许像stringint32等类型,但似乎此类型必须实现IMessage才能进行打包或解包。

是否有办法将string转换为Any或者反之亦然?

如果没有,是否还有其他方法允许在消息中使用任意类型?

例如:

syntax = "proto3";

import "google/protobuf/any.proto";

package Engine;

message SomeMessage {
    string Id = 1;
    google.protobuf.Any AttributeValue = 2;
}

这段代码在C#中会引发编译错误。

var someMessage = new SomeMessage
{
    Id = "123",
    AttributeValue = Any.Pack("Test")
};

参数1:无法将“string”转换为“Google.Protobuf.IMessage”。
2个回答

4
似乎答案可能是“值”类型(Value)。
syntax = "proto3";

import "google/protobuf/struct.proto";

package Engine;

message SomeMessage {
    string Id = 1;
    google.protobuf.Value AttributeValue = 2;
}

0
将字符串打包到 Any 类型中:
var someMessage = new SomeMessage
{
    Id = "123",
    AttributeValue = Any.Pack(new StringValue { Value = "foo bar"})
};

解析字符串:

var data = pack.Unpack<StringValue>();
doSomething(data.Value);

请记住,Stack Overflow 不仅旨在解决当前的问题,还要帮助未来的读者找到类似问题的解决方案,这需要理解基础代码。对于我们社区中的初学者和不熟悉语法的成员来说,这尤其重要。鉴于此,您能否编辑您的答案,包括您正在做什么以及为什么认为这是最好的方法的解释 - Jeremy Caney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接