using System.Collections.Generic;
public static void Main()
var a = new BaseClass(){ Type = 0 };
var b = new DerviedClass(){ Type = 1, Name = "Hello" };
var list = new List<BaseClass>(){a,b};
var json = JsonConvert.SerializeObject(list);
var intermediate = JsonConvert.DeserializeObject<List<dynamic>>(json);
var result = new List<object>();
foreach( dynamic item in intermediate )
if( item.Type == 0 ) result.Add( new BaseClass(){Type = item.Type});
if( item.Type == 1 ) result.Add( new DerviedClass(){Type= item.Type, Name= item.Name});
Console.WriteLine($"[{string.Join(", ",result)}]");
public int Type {get; set;}
public class DerviedClass: BaseClass
public string Name {get; set;}