2016-05-14 61 views
0

我试图为脚本范围IronPython设置一个变量。我想用JObject作为Python字典。这是我试过的。从JObject创建IronPython字典

ScriptScope scope = engine.CreateScope(); 

JObject childObject = new JObject(); 
childObject["child1"] = "test"; 
JObject dataObject = new JObject(); 
dataObject["key1"] = childObject; 

scope.SetVariable("metaData", dataObject); 

我可以使用metaData变量,并通过调用metaData["key1"]使用的第一个关键。但是,当我试图通过调用metaData["key1"]["child1"]来获得下一个值时,我收到以下错误消息:Can not convert from System.String to System.Object.如何像使用普通的Python字典一样使用我的JSON对象?我的JSON对象的深度会有所不同,所以我需要灵活处理。

回答

2

适合我。

var engine = Python.CreateEngine(); 
dynamic scope = engine.CreateScope(); 
scope.metaData = new JObject 
{ 
    ["key1"] = new JObject 
    { 
     ["child1"] = "test", 
    }, 
}; 
engine.Execute(@" 
print metaData['key1']['child1'] 
foo = metaData['key1'] 
foo['bar'] = 'baz' 
print metaData 
", scope); 

打印:

test 
{ 
    "key1": { 
    "child1": "test", 
    "bar": "baz" 
    } 
} 

这取决于你和你的脚本中的对象做什么。

只要在幕后,它仍然是一个普通的老json.net JObject,你不能给它增加任何价值。例如,您不能添加IronPython dict。它必须是可以或可以转换为JToken的东西。