protected object ReadVariableValue(ObjectReader reader) { object value = null; if (reader.ReadStartArray()) { VariableTypeIdentifier varType = (VariableTypeIdentifier)reader.ReadValueAsInt32(); switch (varType) { case VariableTypeIdentifier.BooleanType: value = reader.ReadValueAsBoolean(); break; case VariableTypeIdentifier.ByteType: value = (byte)reader.ReadValueAsInt32(); break; case VariableTypeIdentifier.Int32Type: value = reader.ReadValueAsInt32(); break; case VariableTypeIdentifier.UInt32Type: value = reader.ReadValueAsUInt32(); break; case VariableTypeIdentifier.Int64Type: value = reader.ReadValueAsInt64(); break; case VariableTypeIdentifier.UInt64Type: value = reader.ReadValueAsUInt64(); break; case VariableTypeIdentifier.SingleType: value = reader.ReadValueAsSingle(); break; case VariableTypeIdentifier.DoubleType: value = reader.ReadValueAsDouble(); break; case VariableTypeIdentifier.StringType: // Currently limit strings to a maximum length of 255 octets value = reader.ReadValueAsString(255); break; case VariableTypeIdentifier.ByteArrayType: // Currently limit byte arrays to a maximum length of 255 octets value = reader.ReadValueAsBytes(255); break; default: throw new NotSupportedException(); } reader.ReadEndArray(); } return(value); }