我在我的C#應用程序中使用IronPython作爲腳本語言。我實現的一個「特性」是腳本能夠保存值,然後將這些值暴露給正在執行的下一個腳本。這是通過將要存儲的值傳遞給「主機」應用程序暴露給腳本的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
的List。它工作得很時尚 - 列表被持久化並暴露給下一個Python腳本,但是現在它已成爲JArray
類型(看起來與Json.Net有關)。這不能很好地與Python代碼(期望列表int
s)很好地協作。
我想最簡單的修復方法是將此JArray轉換爲Python int
列表。但是如何?
另外,如果問題可以在C#類中「固定」(鑄造?),以避免用戶必須在其腳本中執行此轉換,那將會很不錯。但是,我不想將de/serialization過程更改爲不再讀取用戶現有數據文件的程度。思考?
你能提供,你目前有什麼什麼樣的期望的結果將是一個例子(JSON) – nozzleman