从JObject创建IronPython字典

时间:2016-05-14 18:56:13

标签: c# python dictionary json.net ironpython

我正在尝试为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对象的深度会有所不同,所以我需要灵活处理它。

1 个答案:

答案 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的东西。