Действительно, в AS3 GetVariable не вытаскивает так просто переменные из полей классов. Причина, видимо, кроется в отсутствии рута. Впрочем, я сильно этот вопрос не пробивал. Нашел более логичный и естественный, на мой взгляд, способ.
Просто в классе (в любом, и в DocumentClass в т.ч.) делаются обычные get(set если хотите) методы. И их надо зарегить ExternalInterface.addCallback'ом, чтобы они были доступны со стороны оболочки. Модификаторы доступа, видимо, не имеют значения в этом случае. В частности, приват-метод будет все равно доступен из оболочки после регистрации его как Callback.

Код:
//AS3
package {
import flash.display.Sprite;
import flash.external.*;
public class Main extends Sprite {
public var testNum:Array;
public function Main() {
this.testNum=[3,2];
ExternalInterface.addCallback("get_testNum", this.get_testNum);
}
private function get_testNum():Array {
return testNum;
}
}
}
//C#
string var = axShockwaveFlash1.CallFunction("<invoke name=\"get_testNum\" returntype=\"xml\"><arguments></arguments></invoke>");
//var получит значение '<array><property id="0"><number>3</number></property><property id="1"><number>2</number></property></array>'
Добавлю, чтобы не изобретать велосипед качните
архив примеров от адоба (~42Mb). В нем есть C#-проект с минимальным набором классов для сериализации/десериализации xml-запросов при работе оболочки с флэш-контролом.