Recursive struct -> map conversion with field filtering