2016-05-14 9 views
0

Ich versuche, eine Variable für den Skriptbereich von IronPython festzulegen. Ich möchte ein JObject als Python-Wörterbuch verwenden. Das habe ich versucht.Erstellen Sie IronPython-Wörterbuch von JObject

ScriptScope scope = engine.CreateScope(); 

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

scope.SetVariable("metaData", dataObject); 

kann ich die metaData Variable verwenden und auch durch den Aufruf metaData["key1"] den ersten Schlüssel verwenden. Aber wenn ich versuche, durch Aufruf von metaData["key1"]["child1"] zum nächsten Wert zu gelangen, erhalte ich die folgende Fehlermeldung: Can not convert from System.String to System.Object. Wie kann ich mein JSON-Objekt verwenden, als wäre es ein normales Python-Wörterbuch? Die Tiefe meines JSON-Objekts wird variieren, also muss ich flexibel sein.

Antwort

2

Funktioniert gut für mich.

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); 

druckt:

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

Es hängt davon ab, was Sie mit dem Objekt in Ihrem Skript tun.

Achten Sie darauf, dass hinter den Kulissen, es ist immer noch eine einfache alte json.net JObject, können Sie keinen Wert hinzufügen. Sie können zum Beispiel kein IronPython dict hinzufügen. Es muss etwas sein, das implizit in eine JToken konvertiert werden kann.

Verwandte Themen