Я использую IronPython в качестве языка сценариев в своем приложении C#. Одна из «функций», которые я реализовал, - это способность сценария сохранять значения, которые затем подвергаются выполнению следующего скрипта. Это достигается путем передачи значений (значений), которые должны быть сохранены в класс C#, который подвергается скрипту приложением «хозяин». Код для хранения значения выглядит примерно так:Работа с JSON.Net JArray в Python?
store.set("xyz", 123)
(«магазин» является переменной, через которую объект 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
с. Он работает в моде - список сохраняется и отображается на следующем скрипте Python, но на данный момент это теперь тип JArray
(что-то похожее на Json.Net). Это не очень хорошо сочетается с кодом Python (который ожидает список int
s).
Я думаю, что самое простое исправление заключается в преобразовании этого JArray в список Python int
. Но как?
В качестве альтернативы было бы неплохо, если бы проблема могла быть «исправлена» в классе C# (кастинг?), Чтобы пользователи не могли делать это преобразование в своих сценариях. Однако я не хочу изменять процесс де-сериализации в той мере, в какой он больше не читает существующие файлы данных пользователей. Мысли?
вы могли бы привести пример того, что желаемый результат будет и то, что вы в настоящее время есть (JSON) – nozzleman