2016-09-29 45 views
2

通过浏览各地我并成功设法创建一个类,可以通过dat:convert暴露Map toJson()方法“中选择”,可以是JSON-指明分数与JSON.encode(myClass),更以下类似如下:使用JSON.decode()的镖从JSON字符串实例类

//My dummy class 
class MyClass{ 
    String p1; 
    String p2; 

    Map toJson{ 
    return { 
     'p1':this.p1, 
     'p2':this.p2 
    } 
    } 
} 

//so I can do 
String jsonString = JSON.encode(myClass) 

不过,我想围绕这样做,甚至其他的方式,如:

String jsonString = '{"p1":"value","p2":"value"}' 
MyClass instance = JSON.decode(jsonString) 

但到目前为止,我没能找到一种方法。 我知道我可以建立我的类的构造函数,从地图初始化它,像:

String jsonString = '{"p1":"value","p2":"value"}' 
MyClass instance = MyClass.fromMap(JSON.decode(jsonString)) 

不过,我一直在寻找的只使用JSON.encode()和JSON.decode更加“对称”方式(),它在某种程度上可行吗?我错过了什么吗?

+0

大约只是隐藏什么'JSON.decode'在构造函数中吗?看起来像(这只是我的意见)最好显式地调用'toJson()',如果异常被抛出它,它不会出现在堆栈跟踪中(我不知道为什么)。 –

+1

嗯,我当然可以,但我的问题更多的是知道为什么我可以选择进入JSON.encode()通过暴露toJson()而不是其他方式。 –

回答

0

在JSON中没有标准的方法来编码类。 {"p1":"value","p2":"value"}不包含任何有关实例化类的信息。也没有标准的方式来创建一个新的类作为字符串(应使用什么库时,几个包含一个类具有相同的名称,...

据我所知,reviver可用于该目的

reviver(var key, var value) { 
    // decode manually 
} 
final jsonDecoder = new JsonDecoder(reviver); 

但齐磊需要有一些硬编码的逻辑如何识别JSON应该产生什么达特类什么以及应该如何实例并从JSON初始化属性。

相关问题