2010-11-16 35 views
15

Có cách nào để tuần tự hóa từ điển bằng bộ đệm giao thức hay tôi sẽ phải sử dụng Tiết kiệm nếu cần?Từ điển trong bộ đệm giao thức

+0

trùng lặp http://stackoverflow.com/questions/3874024/how-does- protobuf-net-support-for-dictionary-keyvaluepair-works –

+1

Không thực sự trùng lặp. Câu hỏi đó là về các ràng buộc .net. OP không chỉ định môi trường ngôn ngữ. – JesperE

Trả lời

28

Mọi người thường viết từ điển dưới dạng danh sách các cặp khóa-giá trị, sau đó xây dựng lại từ điển ở đầu kia.

message Pair { 
    optional string key = 1; 
    optional string value = 2; 
} 

message Dictionary { 
    repeated Pair pairs = 1; 
} 
+1

Có cách nào để làm điều tương tự với loại động không? Tôi có một 'Dictionary ' mà tôi cần serialize. =/Đã cố gắng điều tra để xem liệu bộ đệm giao thức có thể thực hiện điều này mà không cần nỗ lực rất lớn hay không. – mpontillo

+3

Vâng, không. Protobuf không phải là một giao thức serialization đối tượng chung. Bạn cần định nghĩa các thông điệp protobuf cho tất cả các dữ liệu mà bạn muốn tuần tự hóa. (Thành thật mà nói, nếu bạn có một bản đồ , có lẽ bạn nên bắt đầu bằng cách tái cấu trúc mã của bạn.) – JesperE

+0

@Mike Bạn sẽ phải tạo một trường cho mọi loại * có thể *, đó là một lỗi chỉ đang chờ xảy ra. –

0

Bạn có thể kiểm tra gói ProtoText.

Giả sử bạn muốn tuần tự hóa một dict person_dict thành đối tượng được xác định trước PersonBuf đối tượng protobuf được xác định trong mô-đun personbuf_pb2.

Trong trường hợp này, sử dụng ProtoText,

import ProtoText 
from personbuf_pb2 import PersonBuf 

obj = PersonBuf() 
obj.update(person_dict) 
11

Đối với người tìm câu trả lời trong tương lai, ProtoBuf now supports Maps natively:

message MapMessage 
{ 
    map<string, string> MyMap = 1; 
} 
+0

Xin lưu ý rằng Maps vẫn không thể lặp lại được. – mattes

Các vấn đề liên quan