繁体   English   中英

如何使用 protobuf 序列化 C# 中的字典?

[英]How to serialize a Dictionary in C# using protobuf?

是否可以使用 protobuf 序列化字典?

在高层次上,我有一个 function 使用 Lua 编写,其中包含一个表:

function DM()
  
    config = {
        stop_sign = 0.60, 
        traffic_signal = 0.80
        }
        
    UDC:publishAIMLConfig("config")
    
UDC:aimlEventImageDataReq('aimldatacollection',1,priorityLevel,cameraID,resolution,1,5,5,uplink)
end

在 C# 上,我有一个 function,它从表中接收值并将它们存储到类型为 <object, object> 的字典中并打印出来。 但我真正想做的是接收这些值,将它们序列化并通过 MQTT 将其发送到另一个应用程序。

public void publishAIMLConfig(string inputTable)
{
    LuaTable tb = Form1.state.GetTable(inputTable);

    Dictionary<object, object> dict = Form1.state.GetTableDict(tb);

    foreach (KeyValuePair<object, object> de in dict)
    {
        Console.WriteLine("{0} {1}", de.Key.ToString(), de.Value.ToString());
    }
}

问:有没有办法对 C# 字典中的对象进行序列化,如果有,proto 文件会是什么样子?

这里真正的问题不是字典 - 它是object的用法。 Protobuf 不包含类型元数据(除非您使用Any ),这意味着两端需要事先就发送和接收的内容达成一致。 对于object / object map 之类的东西,这是不可能的。 一些方法可以处理 protobuf 中的一组已知类型 - 主要是通过oneof - 但这需要您提前确定可能的类型并有效地更改您的结构,以便您处理具有oneof成员的类型。 最后,请注意,protobuf 中的map仅针对原始和固定(意思是:不是oneof )密钥类型定义; 如果您需要更大的灵活性,您仍然可以做类似的事情,但是您需要编写自己的“键值对”消息类型,其中键和值是具有oneof的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM