I would hope that someone else knows a more efficient way of going about this....
You could code a Method for each entity type (i.e., DBText, MLeader, MText, etc.), and conditionally test for a valid object after casting to the needed type(s), then extract the known Properties that return ObjectId. In other words, if the DBObject is a DBText, then you know to _not_ query the MLeader's Style, etc..
Not sure if there's a way to dynamically iterate all given DBObject's Properties, and test the returned value's type (i.e. == ObjectId), etc..
HTH