2013-10-21 55 views
1

我嘗試使用jsonpickle保存和恢復collection.deque列表,但maxlen參數在進程中丟失。jsonpickle忽略maxlen集合deque

original_test = deque(maxlen=2) 
original_test.append(1) 
original_test.append(2) 

print(original_test) 
>>> deque([1, 2], maxlen=2) # everything ok 

encoded_test = jsonpickle.encode(original_test) 
print(encoded_test) 
>>> {"py/seq": [1, 2], "py/object": "collections.deque"} # where is maxlen? 

restored_test = jsonpickle.decode(encoded_test) 
restored_test.append(3) 

print(restored_test) 
>>> deque([1, 2, 3]) # maxlen missing 

回答

1

​​,其本身不猜測哪個屬性應該被序列化。如果你正在編寫自定義類,你必須tell it

既然你有過deque類沒有控制,但是,你必須實現一個custom serialization handler

class DequeHandler(jsonpickle.handlers.BaseHandler): 
    def flatten(self, obj, data): 
     return list(obj),obj.maxlen 
    def restore(self,obj): 
     return deque(obj[0], maxlen=obj[1]) 
jsonpickle.handlers.register(deque, DequeHandler) 
+0

謝謝您的幫助! – fanti