XML-RPC - 无法序列化递归字典

5 投票
1 回答
3299 浏览
提问于 2025-04-16 18:11

我有一个简单的例子,想通过xml-rpc发送一个字典:

 class CTest(object):
    def __init__(self):
        self.node1 = {'data':'zek', 'parent':{},  'children':[]}
        self.node2 = {'data':'bill', 'parent':{}, 'children':[]}
        self.node1['children'].append(self.node2)
        self.node2['parent'] = self.node1

    def getNode(self):
        return self.node1

我有两个字典:node2是node1的孩子,同时node2也有一个指向node1的父变量。所以这是一个递归字典。当我尝试通过XML-RPC发送node1时,出现了这个异常:

#Command to execute xml-rpc dump method for serialization
test = CTest()
xmlrpclib.dumps((test,), 'Node Object')
#Exception
raise TypeError, "cannot marshal recursive dictionaries"

有没有可能在不改变字典结构的情况下,通过XML-RPC发送node1?

谢谢。

1 个回答

5

自己动手用Python的'pickle'模块来序列化和反序列化'test'。

cPickle.dumps(test)

这样是可以工作的。在网络的另一端,你可以使用

cPickle.loads(received_test_pickle)

在进行XMLRPC调用之前或之后,可能需要对pickle进行base-64编码或解码。

另外,也可以看看PyRo

http://pyro.sourceforge.net/

撰写回答