Json.NET десериализует или сериализует строку json и отображает свойства в разные имена свойств, определенные во время выполнения

У меня есть следующая строка JSON:

{
    "values": {
        "details": {
            "property1": "94",
            "property2": "47",
            "property3": "32",
            "property4": 1
        },
        count: 4
    }
}     

Я собираюсь сопоставить это со следующей моделью:

public class Details
{
    public string property1 { get; set; }
    public string property2 { get; set; }
    public string property3 { get; set; }
    public int property4 { get; set; }
}

public class Values
{
    public Details details { get; set; }
    public int count { get; set; }
}

public class RootObject
{
    public Values values { get; set; }
}

Я хочу иметь возможность сопоставлять имена этих свойств с разными именами во время выполнения при десериализации этой строки JSON следующим образом:

JsonConvert.DeserializeObject<RootObject>(jsonString);

Например, в процессе десериализации я хочу десериализовать имя «property1» в «diff_property_name1» или «diff_property_name2» или «дифференциал_property_name3». Так какЯ выбираю новое имя во время выполнения (новое имя, на которое я изменю имя «property1»), я не могу использовать решение с использованием JsonPropertyAttribute, как предлагается здесь:

.NET NewtonSoft JSON десериализует карту с другим именем свойства

Один из ответов на поставленный выше вопрос (ответ Джека) использует наследование DefaultContractResolver, но в этом случае он не работает.

Обновить

Позже мне нужно было сериализовать объект, полученный в результате десериализации, и сопоставить свойства с различными именами свойств, определенными во время выполнения. Я использовал тот же метод, который предложил Брайан для сериализации:

Я использовал словарь для сопоставления моих новых имен свойств:

var map = new Dictionary<Type, Dictionary<string, string>>
{
    { 
        typeof(Details), 
        new Dictionary<string, string>
        {
            {"property1", "myNewPropertyName1"},
            {"property2", "myNewPropertyName2"},
            {"property3", "myNewPropertyName3"},
            {"property4", "myNewPropertyName4"}
        }
    }
};    

и затем я использовал DynamicMappingResolver Брайана для сериализации объекта следующим образом:

var settings = new JsonSerializerSettings
{
    ContractResolver = new DynamicMappingResolver(map)
};

var root = JsonConvert.SerializeObject(myObjectInstance, settings);            

Ответы на вопрос(4)

Ваш ответ на вопрос