using System.Collections.Generic;
public static void Main()
var example1 = new MyPerson {
DateOfBirth = Convert.ToDateTime("1979-03-01")
var json1 = JsonConvert.SerializeObject(example1.CreateModel());
Console.WriteLine(json1);
var example2 = new List<Foo>()
new Foo() { Param1 = "aaa", Param2 = "bbb" },
new Foo() { Param1 = "ccc", Param2 = "ddd" }
var json2 = JsonConvert.SerializeObject(example2.CreateModels());
Console.WriteLine(json2);
public string FirstName { get; set; }
public DateTime DateOfBirth { get; set; }
public string Param1 { get; set; }
public string Param2 { get; set; }
public static class JsonExtensions
public static object CreateModels<T>(this IEnumerable<T> models, string modelName = null)
modelName = modelName ?? typeof(T).Name+"Collection";
return new Dictionary<string, object>()
{ modelName, models.Select(m => CreateModel(m)) }
public static IDictionary<string, object> CreateModel<T>(this T model, string modelName = null)
modelName = modelName ?? typeof(T).Name;
return new Dictionary<string, object>()
{ modelName, GetProperties(model) }
private static IDictionary<string, object> GetProperties<T>(T obj)
var props = typeof(T).GetProperties();
return props.ToDictionary(p => p.Name, p => (object)new { type = p.PropertyType.ToString(), value = p.GetValue(obj, null).ToString() });