public static Object UnmarshalPrimitive(BinaryReader dataIn)
{
Object value = null;
byte type = dataIn.ReadByte();
switch(type)
{
case NULL:
value = null;
break;
case BYTE_TYPE:
value = dataIn.ReadByte();
break;
case BOOLEAN_TYPE:
value = dataIn.ReadBoolean();
break;
case CHAR_TYPE:
value = dataIn.ReadChar();
break;
case SHORT_TYPE:
value = dataIn.ReadInt16();
break;
case INTEGER_TYPE:
value = dataIn.ReadInt32();
break;
case LONG_TYPE:
value = dataIn.ReadInt64();
break;
case FLOAT_TYPE:
value = dataIn.ReadSingle();
break;
case DOUBLE_TYPE:
value = dataIn.ReadDouble();
break;
case BYTE_ARRAY_TYPE:
int size = dataIn.ReadInt32();
byte[] data = new byte[size];
dataIn.Read(data, 0, size);
value = data;
break;
case STRING_TYPE:
value = ((EndianBinaryReader) dataIn).ReadString16();
break;
case BIG_STRING_TYPE:
value = ((EndianBinaryReader) dataIn).ReadString32();
break;
case MAP_TYPE:
value = UnmarshalPrimitiveMap(dataIn);
break;
case LIST_TYPE:
value = UnmarshalPrimitiveList(dataIn);
break;
default:
throw new Exception("Unsupported data type: " + type);
}
return value;
}