[IronPython] Question about serialization

Curt Hagenlocher curt at hagenlocher.org
Wed Mar 26 16:31:13 CET 2008


This is an interesting problem. Python's pickle writes out enough data to
rebuild the object entirely -- including the class definition, if the object
is a user-defined type.  How do you accurately write out a class definition
for a C# base class?  Would you restrict it to strongly named classes?


On Wed, Mar 26, 2008 at 4:55 AM, Paul Turbett <sls at iinet.net.au> wrote:

> Thanks Michael for the advice. Must appreciated. Unfortunately I hasn't
> worked out yet tho :(
>
> I can use pickle from C# using Evaluate, or from within a Python class, on
> a "pure" Python object. However any attempt at pickling a python object that
> derives from a C# base result in an exception like this:
> Cannot convert MyObject(<MyObject object at 0x000000000000002B>) to Int32
>
> Exploring further, I came across Ops.GetDynamicType() and
> Ops.GetAttrsNames() which I thought might be helpful to get the attributes
> of an object and serialize it somehow (manually), but GetAttrNames requires
> an ICallerContext, and I can't see how to get one of those.
>
> It seems that whilst serializing .NET classes is trivial, and serializing
> python classes is trivial, serializing something that touches both is
> proving quite difficult.
>
> Any further suggestions gratefully received!
>
> Thanks, Paul
>
> Michael Foord wrote:
>
> Paul Turbett wrote:
>
>
> Hi,
>
> I'm using IP as a scripting engine in a C# app. I have various Python
> classes that derive from a C# base class, and have there own additional
> data & functionality.
>
> I would like to be able to serialize instances of the Python classes
> from the C# host for persistence across sessions. Using the standard
> BinaryFormatter with the Serializable attribute is not working - I get
> an error about the python class not being marked as serializable (the C#
> base class is marked as serializable though).
>
> How can I serialize python objects from C#? Should I use reflection to
> roll my own serializer, or is there something in one of the lesser
> documented assemblies like Ops I should use?
>
>
>
> Typically for serializing Python objects you would use pickle [1]. The
> 'dumps' function returns a string (make sure you use the text protocol
> for IronPython).
>
> You could then execute code inside the Python engine to serialize /
> deserialize objects. I've not tried this for instances that inherit from
> C# base classes - but it should work fine. :-)
>
> Michael Foordhttp://www.ironpythoninaction.com
>
> .. [1] http://docs.python.org/lib/module-pickle.html
>
>   I'm using IP 1.1.1 (but will move to 2.0 if that will help). Any
> pointers & advice greatly appreciated!
>
> Thanks, Paul
> _______________________________________________
> Users mailing listUsers at lists.ironpython.comhttp://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>     _______________________________________________
> Users mailing listUsers at lists.ironpython.comhttp://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20080326/b4ec48c4/attachment.html>


More information about the Ironpython-users mailing list