code: def read_property_to_any(obj, propertyIdentifier, propertyArrayIndex=None):
      
      if _debug: read_property_to_any._debug("read_property_to_any %s %r %r", obj, propertyIdentifier, propertyArrayIndex)
  
      # get the datatype
      datatype = obj.get_datatype(propertyIdentifier)
      if _debug: read_property_to_any._debug("    - datatype: %r", datatype)
      if datatype is None:
          raise ExecutionError(errorClass='property', errorCode='datatypeNotSupported')
  
      # get the value
      value = obj.ReadProperty(propertyIdentifier, propertyArrayIndex)
      if _debug: read_property_to_any._debug("    - value: %r", value)
      if value is None:
          raise ExecutionError(errorClass='property', errorCode='unknownProperty')
  
      # change atomic values into something encodeable
      if issubclass(datatype, Atomic):
          value = datatype(value)
      elif issubclass(datatype, Array) and (propertyArrayIndex is not None):
          if propertyArrayIndex == 0:
              value = Unsigned(value)
          elif issubclass(datatype.subtype, Atomic):
              value = datatype.subtype(value)
          elif not isinstance(value, datatype.subtype):
              raise TypeError("invalid result datatype, expecting %s and got %s" \
                  % (datatype.subtype.__name__, type(value).__name__))
      elif not isinstance(value, datatype):
          raise TypeError("invalid result datatype, expecting %s and got %s" \
              % (datatype.__name__, type(value).__name__))
      if _debug: read_property_to_any._debug("    - encodeable value: %r", value)
  
      # encode the value
      result = Any()
      result.cast_in(value)
      if _debug: read_property_to_any._debug("    - result: %r", result)
  
      # return the object
      return result
docs: Read the specified property of the object, with the optional array index,
      and cast the result into an Any object.