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 <[EMAIL PROTECTED]> 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 [EMAIL > PROTECTED]://lists.ironpython.com/listinfo.cgi/users-ironpython.com > > _______________________________________________ > Users mailing [EMAIL > PROTECTED]://lists.ironpython.com/listinfo.cgi/users-ironpython.com > > > > _______________________________________________ > Users mailing list > Users@lists.ironpython.com > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > >
_______________________________________________ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com