@SuppressWarnings("unchecked")
  @Override
  protected ODataProperty read(ODataReaderContext context, JSONObject json) {
    if (json.isNull() || json.isArray()) {
      throw ODataErrors.badRequest("invalid json content");
    }

    Map<String, Object> map = json.map();

    if (map.size() == 1 && Maps.containsKeyIgnoreCase(map, "d")) {
      map = (Map<String, Object>) map.get("d");
    }

    if (map.size() == 1) {
      String propName = map.keySet().iterator().next();

      EdmEntityType edmEntityType = context.getEntityType();

      EdmProperty edmProperty = edmEntityType.findProperty(propName);

      return new ODataPropertyImpl(edmProperty, map.get(propName));

    } else throw ODataErrors.badRequest("invalid json content");
  }