Hi Paul,
the initialStartDateValue are calIDateTime, so all you'd have to do is
serialize that using initialStartDateValue.icalString and then later on
use cal.createDateTime(serializedValue) to restore it. You may also need
to save the timezone id, either separately or by serializing to a
calIIcalProperty. Similar for the others, calendarEvent is calIItemBase
(specifically calIEvent, calITodo), and calendar is a calICalendar.
Regarding the hashId, while the format seems quite clear, it should not
be relied on to split apart the item id. The intent of the hashId was to
have something that can easily be usable in a dict. Instead, save the
calendar id and item id, then use the calendar manager to get the
calendar, and the getItem() method to retrieve the item.
Since you have those ids then anyway, you could use that to serialize
the calendarEvent and calendar.
Philipp