如何告诉jsonpickle在反序列化没有元数据的json时创建哪个类
我刚开始学Python,但在其他编程语言中,我可以告诉序列化工具我想要创建什么类型,然后它会根据反射或自省来处理属性。
如果用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 个回答
1
首先,你提供的那个示例 JSON 输出并不是 jsonpickle 会生成的结果。实际上,你定义的 TestObject 的编码实例看起来是这样的:
'{"py/object": "__main__.TestObject", "_name": 4}'
注意,类型信息和实例变量是一起被编码的。解码后的输出会神奇地恢复成它原来的类型:
jsonpickle.decode('{"py/object": "__main__.TestObject", "_name": 4}')
这将是一个 TestObject 的实例。