【问题标题】:sending object (recursive data structures) by XML-RPC in python在 python 中通过 XML-RPC 发送对象(递归数据结构)
【发布时间】:2011-05-20 15:20:56
【问题描述】:

我需要在 python 中通过 XML-RPC 发送一个对象。我的对象由复合数据类型组成,用于填充树结构:

class Node(object):
'''Composite data type '''
def __init__(self, pData, pParent=None):
    self.mData = pData
    self.mParent = pParent
    self.mChildren = []

self.mParent 是对其父节点的引用。所以我有一个递归数据结构来创建这个结构。当我尝试通过 XML-RPC 直接发送这种数据类型时,它给出了这个错误:

xmlrpclib.Fault: <Fault 1: "<type 'exceptions.TypeError'>:cannot marshal recursive dictionaries">

我认为这个异常是由于其复杂的结构而引发的。因为 xml-rpc 只支持基本数据类型。我不能使用字典,因为我需要在我的客户端同行中有引用。当我使用带有引用的字典时,它会给出与上述相同的错误。 我不能使用pickle,它需要独立于语言。

您对通过 XML-RPC 本地发送对象有什么建议吗?也许如何创建我自己的数据类型以 xml 格式发送?

【问题讨论】:

    标签: python xml-rpc composite recursive-datastructures xmlrpclib


    【解决方案1】:

    看看

    http://www.xs4all.nl/~irmen/pyro3/

    当您想通过网络传输 Python 对象时。

    由于 XMLRPC 是基于 XML 的——顾名思义——你不能在没有序列化的情况下通过网络传输 Python 对象。

    【讨论】:

    • 感谢您的回复。正如您所说,在发送对象之前,它需要以合适的 XML 表示进行序列化。例如,当我发送一个字符串变量时,XML-RPC 会自动生成 variable。那么我是否也可以以 xml 格式序列化我的对象(没有 pickle,更改 xmlrpclib 中的代码)并将其发送给另一个对等点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多