2012-06-05 18 views
8

Tôi mới dùng bộ đệm giao thức và tôi đang sử dụng protobuf-net cho VS2010. từ những gì tôi đang đọc ở đây Dictionary in protocol buffers, có vẻ như protobuf không thể tuần tự hóa từ điển với các loại đối tượng dưới dạng giá trị. nhưng ở đây trên trang web của mình tôi đọc này:Bộ đệm giao thức C# .net - hỗ trợ protobuf-net để tuần tự hóa từ điển các giá trị đối tượng?

Ghi chú về loại

hỗ trợ:

lớp tùy chỉnh mà: được đánh dấu là dữ liệu hợp đồng có một constructor parameterless cho Silverlight: là công khai nhiều thông thường nguyên thủy vv mảng thứ nguyên đơn: T [] Danh sách/IList Từ điển/IDictionary bất kỳ loại nào triển khai IEnumerable và có phương thức Add (T) Mã giả định các loại sẽ có thể thay đổi xung quanh các thành viên được bầu. Theo đó, cấu trúc tùy chỉnh không được hỗ trợ vì chúng không thay đổi.

có vẻ như nó được hỗ trợ.

tôi thành công có thể biên dịch một danh sách các đối tượng như sau:

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

này hoạt động tốt cho một List<SomeClass>. Tại sao tôi không thể tuần tự hóa bằng cách sử dụng protobuf-net một Dictionary<int, SomeClass>? Thông báo trông như thế nào để sắp xếp một số Dictionary<int, SomeClass>?

Trả lời

9

A Dictionary<int,SomeClass> hoàn toàn có thể thay thế được bằng protobuf-net. Protobuf-net hoạt động đơn giản nhất khi làm việc mã đầu tiên, vì vậy: * chỉ có một Dictionary<int,SomeClass> trong mô hình của bạn. Bạn không bắt buộc phải sử dụng .proto ở tất cả - được cung cấp chủ yếu cho mục đích đa nền tảng. Các đặc điểm kỹ thuật .proto không có khái niệm về một cuốn từ điển, nhưng nếu bạn được yêu cầu sử dụng một sơ đồ .proto, thì đây được đăng như:

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

với các từ điển như

repeated KeyValuePairInt32SomeClass YourDictionary = [n]; 
Các vấn đề liên quan