我是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.htmc#看起来像:
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实例