docs: def _convert_json_to_entity(entry_element, property_resolver):
      ''' Convert json response to entity.
  
      The entity format is:
      {
         "Address":"Mountain View",
         "Age":23,
         "AmountDue":200.23,
         "CustomerCode@odata.type":"Edm.Guid",
         "CustomerCode":"c9da6455-213d-42c9-9a79-3e9149a57833",
         "CustomerSince@odata.type":"Edm.DateTime",
         "CustomerSince":"2008-07-10T00:00:00",
         "IsActive":true,
         "NumberOfOrders@odata.type":"Edm.Int64",
         "NumberOfOrders":"255",
         "PartitionKey":"mypartitionkey",
         "RowKey":"myrowkey"
      }
      '''
      entity = Entity()
  
      properties = {}
      edmtypes = {}
      odata = {}
  
      for name, value in entry_element.items():
          if name.startswith('odata.'):
              odata[name[6:]] = value
          elif name.endswith('@odata.type'):
              edmtypes[name[:-11]] = value
          else:
              properties[name] = value
  
      # Partition key is a known property
      partition_key = properties.pop('PartitionKey', None)
      if partition_key:
          entity['PartitionKey'] = partition_key
  
      # Row key is a known property
      row_key = properties.pop('RowKey', None)
      if row_key:
          entity['RowKey'] = row_key
  
      # Timestamp is a known property
      timestamp = properties.pop('Timestamp', None)
      if timestamp:
          entity['Timestamp'] = _from_entity_datetime(timestamp)
          
      for name, value in properties.items():
          mtype = edmtypes.get(name);
  
          # use the property resolver if present
          if property_resolver:
              mtype = property_resolver(partition_key, row_key, 
                                        name, value, mtype)
  
              # throw if the type returned is not a valid edm type
              if mtype and mtype not in _EDM_TYPES:
                  raise AzureException(_ERROR_TYPE_NOT_SUPPORTED.format(mtype))
  
          # Add type for Int32
          if type(value) is int:
              mtype = EdmType.INT32
  
          # no type info, property should parse automatically
          if not mtype: 
              entity[name] = value
          else:  # need an object to hold the property
              conv = _ENTITY_TO_PYTHON_CONVERSIONS.get(mtype)
              if conv is not None:
                  try:
                      property = conv(value)
                  except Exception as e:
                      # throw if the type returned by the property resolver
                      # cannot be used in the conversion
                      if property_resolver:
                          raise AzureException(
                              _ERROR_INVALID_PROPERTY_RESOLVER.format(name, value, mtype))
                      else:
                          raise e
              else:
                  property = EntityProperty(mtype, value)
              entity[name] = property
  
      # extract etag from entry
      etag = odata.get('etag')
      if timestamp:
           etag = 'W/"datetime\'' + url_quote(timestamp) + '\'"'
      entity['etag'] = etag
  
      return entity