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



我是python新手,但在其他语言中,我已经能够告诉序列化器我想要创建什么类型,并让它基于反射/自省反序列化或绑定属性。

jsonpickle将类型信息添加到json中,如果您使用jsonpickle序列化它,但是在这种情况下,我得到的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没有输入,等等…但是,我没有理由仅仅为了进行基本的序列化就需要摆弄字典映射。

首先,您提供的示例json输出不是jsonpickle将输出的内容。相反,您定义的TestObject的编码实例看起来像这样:

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

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

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

将是一个TestObject实例

相关内容

最新更新