public Variant ReadVariant(string fieldName)
{
object token = null;
if (!ReadField(fieldName, out token))
{
return Variant.Null;
}
var value = token as Dictionary<string, object>;
if (value == null)
{
return Variant.Null;
}
try
{
m_stack.Push(value);
var encoding = ReadByte("Encoding");
BuiltInType type = (BuiltInType)(encoding & (byte)VariantArrayEncodingBits.TypeMask);
if ((encoding & (byte)VariantArrayEncodingBits.Array) != 0)
{
var dimensions = ReadInt32Array("Dimensions");
var array = ReadVariantBody("Body", type);
if (array.Value is Array && dimensions != null && dimensions.Count > 1)
{
array = new Variant(new Matrix((Array)array.Value, type, dimensions.ToArray()));
}
return array;
}
else
{
return ReadVariantBody("Body", type);
}
}
finally
{
m_stack.Pop();
}
}