C# .net protobuf-net 支持序列化对象值字典



我是协议缓冲区的新手,我正在使用 protobuf-net 用于 VS2010。 从我在这里阅读的协议缓冲区中的字典来看,protobuf 似乎无法序列化将对象类型作为值的字典。但是在他的网站上,我读到了以下内容:

类型说明

支持:

自定义类: 标记为数据协定 具有无参数 Silverlight的构造函数:是公共的,许多常见的基元等 单维数组: T[] 列表/IList 字典/词典 任何类型的 实现 IEnumerable 并具有 Add(T) 方法 代码假设 该类型将在当选成员周围可变。因此 不支持自定义结构,因为它们应该是不可变的。

这似乎是受支持的。

我可以成功地编译一个对象列表,如下所示:

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

这对于List<SomeClass>工作正常。 为什么我不能使用 protobuf-net a Dictionary<int, SomeClass> 进行序列化?序列化Dictionary<int, SomeClass>的消息是什么样子的?

Dictionary<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]; 

最新更新