using System.Collections;
using System.Collections.Generic;
using Newtonsoft.Json.Serialization;
public class mycustomclass
public string name {get;set;}
public List<string> Productlist {get;set;}
public List<string> SelectedItems{get;set;}
public static void Main()
mycustomclass omycustomclass = new mycustomclass{name = "Test",Productlist = new string[]{"Product1","Product2","Product3"}.ToList(), SelectedItems = new string[]{"Item1","Item2","Item3"}.ToList()};
mycustomclass omycustomclass2 = new mycustomclass{name = "Test",Productlist = new string[]{"Product4","Product5","Product6"}.ToList(), SelectedItems = new string[]{"Item4","Item5","Item6"}.ToList()};
foo.Dict = new Dictionary<string, string>();
foo.Dict.Add("Gee", "Whiz");
foo.Dict.Add("Fizz", "Bang");
Dictionary<mycustomclass, List<string>> custom = new Dictionary<mycustomclass, List<string>>();
custom.Add(omycustomclass, new string[]{"l1","l2","l3"}.ToList());
custom.Add(omycustomclass2, new string[]{"l4","l5","l6"}.ToList());
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Formatting = Formatting.Indented;
settings.ContractResolver = new DictionaryAsArrayResolver();
string json = JsonConvert.SerializeObject(foo, settings);
foo = JsonConvert.DeserializeObject<Foo>(json, settings);
foreach (var kvp in foo.Dict)
Console.WriteLine(kvp.Key + ": " + kvp.Value);
public Dictionary<string, string> Dict { get; set; }
public IDictionary<mycustomclass, List<string>> Dict2 { get; set; }
class DictionaryAsArrayResolver : DefaultContractResolver
protected override JsonContract CreateContract(Type objectType)
if (objectType.GetInterfaces().Any(i => i == typeof(IDictionary) ||
(i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IDictionary<,>))))
return base.CreateArrayContract(objectType);
return base.CreateContract(objectType);