在python中通过XML-RPC发送对象(递归数据结构)

发布于 2024-11-08 17:13:19 字数 655 浏览 7 评论 0原文

我需要在 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 格式发送它?

I need to send an object through XML-RPC in python. My object consist of composite data type to populate a tree structure:

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

self.mParent is reference to its parent node. So I have a recursive data structures to create this structure. When I try to send this data type directly by XML-RPC, it gives this error:

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

I think this exception raised due to its complex structure. Because xml-rpc supports only basic data types. I couldn't use dictionaries, because I need to have the references in my client peer. When i use dictionaries with references, it gives the same error above.
I couldn't use pickle, It needs to be language independent.

Do you have any suggestion to send an object through XML-RPC natively? Maybe how to create my own data type to send it in xml format?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

淡淡绿茶香 2024-11-15 17:13:19

​想要通过网络传输 Python 对象。

由于 XMLRPC 基于 XML(顾名思义),因此您无法在没有序列化的情况下通过网络传输 Python 对象。

Look at

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

when you want to transfer Python objects over the wire.

Since XMLRPC is based on XML -as the name implies - you can not transfer Python objects over the wire without serialization.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文