我正在尝试为IronPython
的脚本范围设置变量。我想使用JObject
作为Python字典。这就是我的尝试。
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.
如何使用我的JSON对象,就像它是普通的Python字典一样?我的JSON对象的深度会有所不同,所以我需要灵活处理它。
答案 0 :(得分: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
的东西。