【发布时间】:2011-11-18 18:47:17
【问题描述】:
我编写了一个 IronPython 包来处理一些数据,现在我将它包装在一个 C# 应用程序中。应用程序的部分功能是保存项目的状态,然后再恢复保存的状态。
我在 IronPython 中使用pickle 模块从我的自定义包中保存一个类的对象。在我用 C# 进行包装之前,这没问题:我使用 pickle.dump() 函数将对象序列化为文件。现在我想使用pickle.dumps() 函数将对象序列化为字符串,然后将该字符串传递给C# 对象并使用XmlSerializer 序列化THAT 对象。
序列化似乎可行,但反序列化失败:C# 获取反序列化的字符串并将其传递给 IronPython,IronPython 应该能够使用 pickle.loads() 函数重构原始对象,但却引发了此错误:
System.Collections.Generic.KeyNotFoundException {"ô"}
你能帮我解决这个问题吗?我有两个理论:
也许 IronPython 和 C# 之间或 C#、IronPython 之间的字符串编码存在差异,
pickle模块的预期是什么?一开始并不是整个字符串都被序列化了,所以我只是把废话传递给
pickle.loads()
将我引向这些理论的证据:
错误消息 (ô) 中缺少的键看起来有点像 unicode-parsed-as-ASCII-text。
1234563但它可能刚刚达到 Visual Studio 调试器将显示的限制。
提前致谢!
【问题讨论】:
-
嗯:bugs.python.org/issue2980>
-
能否发布一些显示此问题的短代码?
-
恐怕生成我的设置所需的代码量超出了这里的合理范围。
-
我们并不完全需要您的设置。但是一些显示相同问题的(相对)简单的代码可能会有所帮助。
标签: c# .net ironpython pickle