using System.Collections.Generic;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Serialization;
public int Id { get; set; }
public IDictionary<string, object> ExtensionData { get; set; }
public class FooContractResolver : DefaultContractResolver
protected override JsonObjectContract CreateObjectContract(Type objectType)
var contract = base.CreateObjectContract(objectType);
if (objectType == typeof(Foo))
contract.ExtensionDataGetter =
var result = new List<KeyValuePair<object, object>>();
foreach(KeyValuePair<string, object> obj in (o as Foo).ExtensionData)
result.Add(new KeyValuePair<object, object>(obj.Value, obj.Key));
public static void Main()
foo.ExtensionData = new Dictionary<string, object>();
foo.ExtensionData.Add("Name", default(int));
Console.WriteLine(JsonConvert.SerializeObject((foo), new JsonSerializerSettings() {
ContractResolver = new FooContractResolver()