10

我是协议缓冲区的新手,我正在为 VS2010 使用 protobuf-net。从我在这里读到的协议缓冲区中的字典,protobuf 似乎不能序列化具有对象类型作为值的字典。但在他的网站上,我读到了这个:

类型注释

支持的:

自定义类: 被标记为数据契约 具有 Silverlight 的无参数构造函数: 是公共的许多常见原语等单维数组: T[] List / IList Dictionary / IDictionary 任何实现 IEnumerable 并具有 Add(T) 方法的类型code assumes that types will be mutable around the elected members. 因此,不支持自定义结构,因为它们应该是不可变的。

这似乎是受支持的。

我可以像这样成功编译对象列表:

message ValuesObject {
    optional int32 SomeVal = 1;
    repeated SomeClass ListOfSomeClassTypes = 2;
}

这适用于List<SomeClass>. 为什么我不能使用 protobuf-net a 进行序列化Dictionary<int, SomeClass>?序列化 a 的消息会是什么样子Dictionary<int, SomeClass>

4

1 回答 1

12

ADictionary<int,SomeClass>完全可以使用 protobuf-net 进行序列化。Protobuf-net在代码优先工作时工作最简单,因此:*只需Dictionary<int,SomeClass>在您的模型中添加一个。您根本不需要使用 .proto - 主要用于跨平台目的。.proto 规范没有字典的概念,但如果您需要使用 .proto 模式,则将其序列化为:

message KeyValuePairInt32SomeClass {
    required int32 Key = 1;
    required SomeClass Value = 2;
}

用字典作为

repeated KeyValuePairInt32SomeClass YourDictionary = [n]; 
于 2012-06-05T06:46:38.053 回答