您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使simplejson可序列化类

如何使simplejson可序列化类

您不能使用序列化任意对象simplejson。您需要将default和传递object_hookdumpload。这是一个例子:

class SerializerRegistry(object):
    def @R_419_1207@(self):
        self._classes = {}
    def add(self, cls):
        self._classes[cls.__module__, cls.__name__] = cls
        return cls
    def object_hook(self, dct):
        module, cls_name = dct.pop('__type__', (None, None))
        if cls_name is not None:
            return self._classes[module, cls_name].from_dict(dct)
        else:
            return dct
    def default(self, obj):
        dct = obj.to_dict()
        dct['__type__'] = [type(obj).__module__,
                           type(obj).__name__]
        return dct

registry = SerializerRegistry()

@registry.add
class A(object):
    def @R_419_1207@(self, item1):
        self.item1 = item1
    def __repr__(self):
        return str(self.__dict__)
    def to_dict(self):
        return dict(item1=self.item1)
    @classmethod
    def from_dict(cls, dct):
        return cls(**dct)

s = json.dumps(A(1), default=registry.default)
a = json.loads(s, object_hook=registry.object_hook)

结果是:

>>> s
'{"item1": 1, "__type__": ["__main__", "A"]}'
>>> a
{'item1': 1}

但是,您真正需要的是一个default从希望序列化的对象创建字典的函数,以及一个object_hook如果字典不够用的函数,当给定字典时,该对象将返回一个(正确类型的)对象。最好的方法是在可序列化类上具有从对象创建字典并将其构造回去的方法,并且还具有识别字典所属的类的映射。

您还可以将标识符添加到类中,以用作的索引_classes。这样,如果您要上课,就不会有问题。

其他 2022/1/1 18:34:54 有461人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶