2016-05-14 107 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的東西。