私はIronPythonをC#アプリケーションのスクリプト言語として使用しています。私が実装した "機能"の1つは、スクリプトが実行されている次のスクリプトに公開される値を保持する機能です。これは、格納される値をC#クラスに渡し、 "ホスト"アプリケーションによってスクリプトに公開されることによって実現されます。値を格納するコードは次のようになります。PythonでJSON.Net JArrayを扱う?
store.set("xyz", 123)
( 'store'はC#オブジェクトが公開される変数です)。
内部的には、C#クラスはこれらの名前と値のペアをDictionary<string, object>
に格納します。スクリプトの実行が終了すると、Json.Net(var json = JsonConvert.SerializeObject(dict)
)を使用して辞書をシリアライズし、結果の文字列をファイルに書き込みます。
次のスクリプトを実行すると、「ホスト」C#アプリケーションを読み込み、deserialisesファイルを(JsonConvert.DeserializeObject<Dictionary<string, object>>(s)
)、スクリプトは次のようにアクセスすることができ、同じC#クラスを介してスクリプトに名前/値のペアを公開します。
my_var = store.get("xyz")
この機能は、intやfloatなどの単純な型でうまくいきましたが、ユーザーのうちの1人がint
のリストを保持する必要があります。それはファッションに作用します - リストは永続化され、次のPythonスクリプトにさらされますが、今の時点ではJArray
タイプです(これはJson.Netと関係があります)。これは、Pythonコード(これはint
のリストを期待しています)とうまくやりません。
私は、このJArrayをPython int
リストに変換するのが最も簡単な修正だと思います。しかしどうですか?
また、ユーザーがスクリプトでこの変換を実行するのを避けるために、問題がC#クラス(キャスト?)で「修正」されていればいいでしょう。しかし、私はde/serializationプロセスをユーザーの既存のデータファイルを読み取らない程度に変更したくありません。思考?
は、あなたが希望する結果がどうなるかの例と何あなたが現在持っているを提供することができます(JSON) – nozzleman