序列化从 CLR 类型继承的 IronPython 对象
这可能是一个有点奇怪的问题,但是有没有可靠的方法来序列化其类扩展 CLR 类型的 IronPython 对象?
例如:
class Foo(System.Collections.Generic.List[str]):
def Test(self):
print "test!"
System.Collections.Generic.List
可使用 Pickle 进行序列化,因为它实现了 ISerialized
接口,但发出的可序列化 CLR 类型的子类似乎不起作用,并且在运行 pickle.dumps(Foo())
时出现 ImportError: No module named Generic in mscorlib, Version=4
。
此外,运行通常的 Formatter.Serialize(stream, object)
会告诉我:
SystemError: Type 'IronPython.NewTypes.System.Collections.Generic.List`1_4$4' in Assembly Snippets.scripting, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
在嵌入式 C# 环境中运行时如何实现 IronPython 对象的序列化?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我不知道这是否是你想要的,但你可以考虑 python 版本的 protobuf (这里)?请注意,我还没有专门在 IronPython 上测试过它。这还有一个额外的优点,即还有可能有所帮助的 C# 实现,同时保持平台独立性。如果可能的话,我希望 protobuf-net 支持 DLR 类型,但这是一项艰巨的任务。
作为旁注,我个人建议使用专用的 DTO 类型,而不是尝试扩展内置类型。
I don't know if it is what you are after, but you could consider the python version of protobuf (here)? I haven't tested it specifically on ironpython, mind. This has the added advantage that there are also C# implementations that may help, while keeping it platform independent. When possible I want to get protobuf-net to support DLR types, but that is a big job.
As a side note, personally I'd recommend having a dedicated DTO type rather than trying to extend the inbuilt types.
引用自 clrtype元类
,但也许您可以通过 序列化代理。
Quote from clrtype metaclasses
I haven't tried, but maybe you can solve this issue with manual serialization via serialization surrogates.