[英]How to Serialize/De-Serialize List<MyClass> using protobuf-net 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.