C#.net协议缓冲区 - protobuf-net支持序列化对象值字典?

时间:2012-06-05 02:44:37

标签: c# protocol-buffers protobuf-net

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

  

关于类型的说明

     

支持:

     

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

似乎支持它。

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

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

这适用于List<SomeClass>。为什么我不能使用protobuf-net Dictionary<int, SomeClass>序列化?序列化Dictionary<int, SomeClass>

的消息是什么样的?

1 个答案:

答案 0 :(得分:9)

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