private void SetExtensionData(JsonObjectContract contract, JsonReader reader, string memberName, object o)
    {
      if (contract.ExtensionDataSetter != null)
      {
        try
        {
          JToken extensionDataValue = JToken.ReadFrom(reader);

          contract.ExtensionDataSetter(o, memberName, extensionDataValue);
        }
        catch (Exception ex)
        {
          throw JsonSerializationException.Create(reader, "Error setting value in extension data for type '{0}'.".FormatWith(CultureInfo.InvariantCulture, contract.UnderlyingType), ex);
        }
      }
      else
      {
        reader.Skip();
      }
    }