using System.Collections.Generic;
public static void Main()
Node child = new Node(2);
child.children.Add(root);
root.children.Add(child);
root.children.Add(new Node(-1));
Console.WriteLine(root.children[0].children[0] == root);
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
string json = "{\"$id\":\"1\",\"val\":3,\"children\":[{\"$id\":\"2\",\"val\":2,\"children\":[{\"$ref\":\"1\"}]},{\"$id\":\"3\",\"val\":-1,\"children\":[]}]}";
string json2 = JsonConvert.SerializeObject(root, settings);
Console.WriteLine(json2);
Node node = JsonConvert.DeserializeObject<Node>(json, settings);
Console.WriteLine(node.val);
Console.WriteLine(node.children.Count);
Console.WriteLine(node.children[0].val);
Console.WriteLine(node.children[0].children[0] == node);
Console.WriteLine(node.children[1].val);
Console.WriteLine(JsonConvert.SerializeObject(root, settings));
public List<Node> children;
children = new List<Node>();