C#的.NET协议缓冲器 - 用于序列化对象值的字典protobuf网支持吗?(C# .net pr

2019-07-29 17:31发布

我是新来的协议缓冲区,我使用protobuf网为VS2010。 从我读什么这里在协议缓冲区字典 ,它似乎并不认为protobuf的可序列化一个字典,对象类型的值。 但在这里,他的网站上我这样说的:

在一些注记

支持的:

自定义类的是:被标记为数据合同具有Silverlight的参数的构造函数:是公共许多共同的基元等一维数组:T []列表/ IList的词典/ IDictionary的其中实现了IEnumerable并具有添加(T)的方法的任何类型的代码假定类型将是选举产生的成员围绕可变的。 因此,自定义结构不被支持,因为他们应该是一成不变的。

这似乎是它的支持。

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

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

这对于一个正常工作List<SomeClass> 。 为什么我不能用序列protobuf网一个Dictionary<int, SomeClass> ? 什么会的消息模样串行化Dictionary<int, SomeClass>

Answer 1:

Dictionary<int,SomeClass>与protobuf网完美serailizable。 protobuf网工程工作代码为先,所以当最简单应用 :*只是有一个Dictionary<int,SomeClass>在你的模型。 您不需要使用.proto 在所有 -这主要是为了跨平台的目的。 该.proto规范有没有一本字典的概念,但如果你需要使用一个.proto模式,那么这个被序列为:

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

与字典作为

repeated KeyValuePairInt32SomeClass YourDictionary = [n]; 


文章来源: C# .net protocol buffers - protobuf-net support for serializing dictionary of object values?