Ok, it's starting to get clearer. Apparently one must explicitly include a reference to the typed object class held in the ArrayCollection for Flex to properly cast the objects.
For example, here's my handler:
public function loadProfileHandler(event:ResultEvent):void
var accountProfile:AccountProfileDTO = event.result as AccountProfileDTO;
for each(var userMed:UserMedication in accountProfile.userMedications)
If I comment out the "for each" loop, I get back AS Object instances in the ArrayCollection. With the loop in place I get back UserMedication instances in the ArrayCollection (in the result even before the loop executes). Flex does not perform the cast without a reference to the typed object's class. That's strange!
I seem to recall reading about this in the documentation, but it didn't make sense...until now. Is this a bug (I'm using BlazeDS so I'll probably wrongly assume FDS has the same problem)?
I've designed several DTOs with Lists several levels deep in the object graph. Am I going to have to drill down and loop through all the lists in my DTO's object graph just to make sure ArrayCollection elements are properly cast to their appropriate type. Yikes!
Hopefully someone will chime in and tell me there's a better way. 🙂