2016-05-14 7 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に暗黙的に変換可能なものでなければなりません。

関連する問題