/// Serialize the object
/// </summary>
/// <returns>An <see cref="OSDMap"/> containing the objects data</returns>
public OSDMap Serialize()
{
OSDMap dataMap = new OSDMap(3);
dataMap.put("timestamp", OSD.FromDate(Timestamp));
dataMap.put("type", OSD.FromInteger((int)Dialog.getIndex()));
dataMap.put("binary_bucket", OSD.FromBinary(BinaryBucket));
OSDMap paramsMap = new OSDMap(11);
paramsMap.put("from_id", OSD.FromUUID(FromAgentID));
paramsMap.put("from_name", OSD.FromString(FromAgentName));
paramsMap.put("to_id", OSD.FromUUID(ToAgentID));
paramsMap.put("parent_estate_id", OSD.FromInteger((int)ParentEstateID));
paramsMap.put("region_id", OSD.FromUUID(RegionID));
paramsMap.put("position", OSD.FromVector3(Position));
paramsMap.put("from_group", OSD.FromBoolean(GroupIM));
paramsMap.put("id", OSD.FromUUID(IMSessionID));
paramsMap.put("message", OSD.FromString(Message));
paramsMap.put("offline", OSD.FromInteger(Offline.getIndex()));
paramsMap.put("data", dataMap);
OSDMap imMap = new OSDMap(1);
imMap.put("message_params", paramsMap);
OSDMap map = new OSDMap(1);
map.put("instantmessage", imMap);
return map;
}