using System.Collections.Generic;
using Newtonsoft.Json.Serialization;
public static void Main()
var data = new SiteData()
ConnectionTypes = new Dictionary<string, object>()
{ "1", WrapInDictionary( new dialup() { Speeds = new Dictionary<string, uint>() { {"1", 9600}, {"2", 115200} }, PhoneNumber = "0118 999 881 999 119 725 ... 3" } ) },
{ "2", WrapInDictionary( new Ethernet() { Speed = "1000" } ) },
{ "3", WrapInDictionary( new ipv4() { SomeCapability=true } ) }
var json = JsonConvert.SerializeObject(data, prettyJson);
private static Dictionary<string, object> WrapInDictionary(object value)
return new Dictionary<string, object>()
{ value.GetType().Name, value }
private static readonly JsonSerializerSettings prettyJson = new JsonSerializerSettings()
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Formatting = Formatting.Indented
public Dictionary<string, uint> Speeds;
public string PhoneNumber;
public bool SomeCapability;
public Dictionary<string, object> ConnectionTypes;