是否可以定义一个函数并将其反序列化到json中或从json中反序列化?例如,如果我读文件:
foo.json:
{
name: 'foo',
eventListener: (event){
//Do stuff with event in here
}
}
然后在dart代码中将json读入 map 并分配属性:
myObject.name = fooMap['name'];
myObject.onChange.listen(fooMap['eventListener']);
更新资料
感谢贾斯汀的澄清,我试图使用数据驱动的设计编写一个简单的基于文本的游戏,以便其他用户可以轻松地为其编写自己的附加内容和mod。
我希望我的程序能够读取“流派包” json文件,例如:
fantasy.json:
{
name: 'Fantasy',
description: 'Traditional fantasy concepts, knights, dragons, magic ... etc.',
classes: [
{
name: 'Warrior',
description: 'A melee fighter that wears heavy armor',
passiveSkill: {
name: 'Inner rage',
description: 'When health drops below 10%, physical damage is increased by 100%.',
impl: {
event: 'hpChange',
fn: (event){
if(event.hp < (event.hpMax / 10)){
event.character.physicalAttack += event.character.physicalAttack;
}
}
}
}
},
// many more classes defined here...
]
}
因此,在dart文件中的某个地方,当其解析genre json文件时,它将把事件侦听器函数连接到字符“hpChange”事件。但是从您的评论看来,我将需要使用一个字符串来编码我的事件侦听器逻辑,并具有一个特殊的事件处理程序创建器函数来解析该字符串并生成一系列嵌套函数以实现效果……也许。
最佳答案
不,无法在Dart中序列化功能。
虽然也可以将函数序列化为JSON,然后将其写入JSONt,然后使用eval()
读回,但也无法直接将函数序列化为JSON,但这仅在未关闭任何函数的情况下有效可用变量(在函数外部声明但在函数内部访问的变量),因为这些变量可能未在反序列化的作用域中定义。
在非常有限的几种情况下,您可以执行的操作是序列化函数的名称及其参数,然后使用镜像或查找表在反序列化端手动查找函数。您仍然对自由变量有疑问,但是与其说没有定义它们,还不如说它们没有您期望的值,这不是问题。这实际上取决于您的应用程序。
如果您提供有关用例的更多信息,我们也许可以提供其他建议。
关于json - dart,是否可以将功能反序列化到json/从json反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19916828/