如何在反序列化没有jsonpickle元数据/类型信息的json时告诉jsonpickle创建哪个类

时间:2014-08-03 19:02:08

标签: python json

我是python的新手,但在其他语言中,我能够告诉序列化程序我想要创建什么类型,并让它根据反射/内省反序列化或绑定属性。

jsonpickle如果你用jsonpickle序列化它会向json添加类型信息,但是在这种情况下,我得到的json来自外部源,并且没有类型元数据。

我想将类型信息传递给序列化程序。

import jsonpickle

class TestObject(object):

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value

#from an external source
jsons = '{ "name" : "Test" }'

我希望我能做的事情如下:

jsonpickle.decode(jsons,TestObject)

这是我的问题的C#示例: http://james.newtonking.com/json/help/index.html?topic=html/M_Newtonsoft_Json_JsonConvert_DeserializeObject_3.htm

c#看起来像:

public class TestObject {
    public string Name { get;set; }
}

var json = "{ "name" : "Test" }";

var deserialized = JsonConvert.DeserializeObject(json,typeof(TestObject));

我知道python没有输入等等......但我没有理由为了进行基本的序列化而需要弄乱字典映射。

1 个答案:

答案 0 :(得分:0)

首先,您提供的示例json输出不是jsonpickle将输出的内容。相反,您定义的TestObject的编码实例将如下所示:

'{"py/object": "__main__.TestObject", "_name": 4}'

请注意,类型与实例变量一起编码。解码后的输出将神奇地放回原来的类型:

jsonpickle.decode('{"py/object": "__main__.TestObject", "_name": 4}')

将是一个TestObject实例。