using System.Collections.Generic;
using Newtonsoft.Json.Serialization;
public static void Main()
var map = new Dictionary<Type, Dictionary<string, string>>
new Dictionary<string, string>
var settings = new JsonSerializerSettings
ContractResolver = new DynamicMappingResolver(map)
var root = JsonConvert.DeserializeObject<RootObject>(json, settings);
Console.WriteLine("property1: " + root.values.details.property1);
Console.WriteLine("property2: " + root.values.details.property2);
Console.WriteLine("property3: " + root.values.details.property3);
Console.WriteLine("property4: " + root.values.details.property4);
class DynamicMappingResolver : DefaultContractResolver
private Dictionary<Type, Dictionary<string, string>> memberNameToJsonNameMap;
public DynamicMappingResolver(Dictionary<Type, Dictionary<string, string>> memberNameToJsonNameMap)
this.memberNameToJsonNameMap = memberNameToJsonNameMap;
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
JsonProperty prop = base.CreateProperty(member, memberSerialization);
Dictionary<string, string> dict;
if (memberNameToJsonNameMap.TryGetValue(member.DeclaringType, out dict) &&
dict.TryGetValue(member.Name, out jsonName))
prop.PropertyName = jsonName;
public string property1 { get; set; }
public string property2 { get; set; }
public string property3 { get; set; }
public int property4 { get; set; }
public Details details { get; set; }
public int count { get; set; }
public Values values { get; set; }