using System.Collections.Generic;
public static void Main()
var json = Newtonsoft.Json.JsonConvert.SerializeObject(charts);
public class Chart<T> : ChartBase where T : ChartSetting
public T Setting { get; set;}
public int Id { get; set; }
public string Name { get; set; }
public abstract class ChartSetting
public string Title {get;set;}
public class XYSetting : ChartSetting
public int Foo { get;set;}
public class ProfileSetting : ChartSetting
public string Bar { get;set;}
private static IEnumerable<Chart<ChartSetting>> Get()
return new List<Chart<ChartSetting>>()
new Chart<ChartSetting>()
Setting = new XYSetting() { Title = "abc", Foo = 0 }
new Chart<ChartSetting>()
Setting = new ProfileSetting() { Title = "abc", Bar = "abc" }