Я написал пакет IronPython для некоторого перебора данных, и теперь я оборачиваю его в приложение C #. Частью функциональности приложения является сохранение состояния проекта, а затем восстановление этого сохраненного состояния.
Я использую модуль pickle
в IronPython, чтобы сохранить объект класса из моего пользовательского пакета. До того, как я сделал перенос в C #, это не было проблемой: я использовал функцию pickle.dump()
для сериализации объекта в файл. Теперь я хочу использовать функцию pickle.dumps()
для сериализации объекта в строку, затем передать эту строку объекту C # и сериализовать THAT объект с XmlSerializer
.
Сериализация, кажется, работает, но десериализация выходит из строя: C # получает десериализованную строку и передает ее IronPython, который должен иметь возможность восстановить исходный объект с помощью функции pickle.loads()
, но вместо этого вызывает эту ошибку:
System.Collections.Generic.KeyNotFoundException {"ô"}
Можете ли вы помочь мне решить эту проблему? У меня есть две теории:
Возможно, существует разница в кодировках строк между IronPython и C # или между C #, IronPython и тем, что ожидается от модуля pickle
?
Во-первых, не вся строка сериализуется, поэтому я просто передаю ерунду на pickle.loads()
Мое доказательство, которое приводит меня к следующим теориям:
Отсутствующий ключ в сообщении об ошибке (ô) выглядит как текст Unicode-parsed-as-ASCII-text.
Если я прерву выполнение (в режиме отладки Visual Studio 2010) и посмотрю на строку перед ее передачей в IronPython для снятия отметки, то, что я вижу, недостаточно для представления всего объекта. Но он может просто достичь предела того, что будет отображаться отладчиком Visual Studio.
Заранее спасибо!