var middle = new Middle(1);
var json = JsonConvert.SerializeObject(root, new JsonSerializerSettings
Formatting = Newtonsoft.Json.Formatting.Indented,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
PreserveReferencesHandling = PreserveReferencesHandling.All,
TypeNameHandling = TypeNameHandling.All,
var deserialized = JsonConvert.DeserializeObject<Root>(json, new JsonSerializerSettings
PreserveReferencesHandling = PreserveReferencesHandling.All
Console.WriteLine("Child.Middle == null? " + (deserialized.Middle.Child.Middle == null));
public Root(){Console.WriteLine("Root");}
public Middle Middle {get;set;}
public Middle(){Console.WriteLine("MiddleDefault");}
public Middle(int Foo){Console.WriteLine("Middle");}
public Root Root {get;set;}
public Child Child {get;set;}
public Child(){Console.WriteLine("Child");}
public Middle Middle {get;set;}