You get the JSON result as a string, so it might be easier for you to remove all the numbers from valuetoExtract. For that you could use Regex.Replace() from System.Text.RegularExpressions namespace. Then you can use a single property for valuetoExtract key.
So your code can look like this:
var jsonString = "{ 'option1': 'someOption1','option2': 'someOption2','id': ['12345'],'filter': 'someFilter','actualValues': [{'otherId': 24,'id': 12345,'valuetoExtract129': '123'},{'otherId': 24,'id': 12345,'valuetoExtract2': '234'},{'otherId': 24,'id': 12345,'valuetoExtract3': '345'}]}";
jsonString = Regex.Replace(jsonString, @"valuetoExtract[0-9]*", "valuetoExtract");
ApiResult result = JsonConvert.DeserializeObject<ApiResult>(jsonString);
Where ApiResult is defined as the following
class ApiResult
{
[JsonProperty(propertyName: "option1")]
public string Option1 { get; set; }
[JsonProperty(propertyName: "option2")]
public string Option2 { get; set; }
[JsonProperty(propertyName: "id")]
public string[] Id { get; set; }
[JsonProperty(propertyName: "filterd")]
public string Filter { get; set; }
[JsonProperty(propertyName: "actualValues")]
public ActualValue[] ActualValues { get; set; }
}
class ActualValue
{
[JsonProperty(propertyName: "id")]
public int Id { get; set; }
[JsonProperty(propertyName: "otherId")]
public int OtherId { get; set; }
[JsonProperty(propertyName: "valuetoExtract")]
public int ValueToExtract { get; set; }
}