You can get a list of properties for an object using the GetAttributeNames function:
msg(GetAttributeNames(myobject, true))
For a room, you get:
name; elementtype; type; visible; displayverbs; inventoryverbs; take; use; givesingle; drop; gender; article; isopen; open; close; container; descprefix; objectslistprefix; exitslistprefix; contentsprefix; description; scenery; hidechildren; listchildren; usedefaultprefix; volume; dark; lightstrength; darklevel; grid_width; grid_length; grid_fill; grid_border; grid_borderwidth; grid_bordersides; grid_render; grid_label; grid_parent_offset_auto; grid_parent_offset_x; grid_parent_offset_y; pov_alias; pov_alt; pov_look; pov_gender; pov_article; feature_usegive; feature_container; feature_switchable; feature_edible; feature_player; feature_lightdark; changedparent; changedisopen; changedlocked; changedswitchedon;
The list for an object is pretty similar. Most of them are easy to guess from the name. However, it is not comprehensive, as some attributes get added during play (such as the "visited" flag on rooms) or are only present if set (such as the "transparent" flag), so to be sure to get all properties you would need to go through all the code. The "parent" attribute is present by default for an object, but not a room, but can be usefully set for a room.