Serialización de un árbol en objeto Json

Tengo las siguientes clases:

TreeNode.cs

public class TreeNode : IEnumerable<TreeNode>
{
    public readonly Dictionary<string, TreeNode> _children = new Dictionary<string, TreeNode>();

    public readonly string Id;
    public TreeNode Parent { get; private set; }

    public TreeNode(string id)
    {
        this.Id = id;
    }

    public TreeNode GetChild(string id)
    {
        return this._childs[id];
    }

    public void Add(TreeNode item)
    {
        if (item.Parent != null)
        {
            item.Parent._childs.Remove(item.Id);
        }

        item.Parent = this;
        this._childs.Add(item.Id, item);
    }

    public IEnumerator<TreeNode> GetEnumerator()
    {
        return this._childs.Values.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }

    public int Count
    {
        get { return this._childs.Count; }
    }
}

FolderStructureNode.cs

public class FolderStructureNode : TreeNode
{
    //Some properties such as FolderName, RelativePath etc.
}

Entonces, cuando tengo un objeto de tipoFolderStructureNode es esencialmente una estructura de datos de árbol donde cada nodo representa una carpeta. Quiero serializar este objeto en un objeto JsonObject. He probado ambos: JavaScriptSerializer y NewtonSoft. En ambos casos obtengo una salida como

[
  [
    []
  ],
  [
    []
  ],
  []
]

En el momento de la serialización, el árbol se ve algo como esto:

¿Cómo lo serializo para obtener el objeto json correcto? ¿Tengo que atravesar el árbol y crear yo mismo el json?

Respuestas a la pregunta(1)

Su respuesta a la pregunta