Json recursively delete and modify nodes

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TaskNode
{
    private string taskNodeName;
    private string taskParams;
    private List<TaskNode> taskNodeList;

    public TaskNode(string taskNodeName, string taskParams, List<TaskNode> taskNodeList=null)
    {
        this.taskNodeName = taskNodeName;
        this.taskParams = taskParams;
        this.taskNodeList = taskNodeList;
    }

    public string TaskNodeName { get => taskNodeName; set => taskNodeName = value; }
    public string TaskParams { get => taskParams; set => taskParams = value; }
    public List<TaskNode> TaskNodeList { get => taskNodeList; set => taskNodeList = value; }
}
public class JsonTestHandle : MonoBehaviour
{
    private TaskNode taskNode;
    // Start is called before the first frame update
    void Start()
    {
        //taskNode = new TaskNode("hexin", "0");
        //List<TaskNode> taskNodes = new List<TaskNode>();
        //TaskNode taskNode1 = new TaskNode("hexin1", "1", new List<TaskNode> { new TaskNode("Xiao Ming", "2"), new TaskNode("Xiao Lan", "3") });
        //TaskNode taskNode2 = new TaskNode("hexin2", "1", new List<TaskNode> { new TaskNode("Zhang San", "2") });
        //taskNodes.Add(taskNode1);
        //taskNodes.Add(taskNode2);
        //taskNode.TaskNodeList = taskNodes;
        //taskNode.TaskNodeList.Add(new TaskNode("李思", "0", new List<TaskNode> { new TaskNode("Xiao Ming", "2"), new TaskNode("Xiao Lan", "3") }));
        //taskNode.TaskNodeList.Add(
        // new TaskNode("王五", "0", new List<TaskNode> {
        // new TaskNode("王五的children", "1", new List<TaskNode> {
        // new TaskNode("Wang Wu's grandson", "2", new List<TaskNode> {
        // new TaskNode("Xiao Ming", "2"), new TaskNode("Xiao Lan", "3")
        // })
        // })
        // })
        // );
        //taskNode.TaskNodeList.Add(
        // new TaskNode("王五", "0", new List<TaskNode> {
        // new TaskNode("Xiao Ming", "1", new List<TaskNode> {
        // new TaskNode("Wang Wu's grandson", "2", new List<TaskNode> {
        // new TaskNode("Xiao Ming", "2"), new TaskNode("Xiao Lan", "3")
        // })
        // })
        // })
        // ); taskNode.TaskNodeList.Add(
        // new TaskNode("Xiao Ming", "0", new List<TaskNode> {
        // new TaskNode("Xiao Ming", "1", new List<TaskNode> {
        // new TaskNode("Wang Wu's grandson", "2", new List<TaskNode> {
        // new TaskNode("Xiao Ming", "2"), new TaskNode("Xiao Lan", "3")
        // })
        // })
        // })
        // );

        //JsonTools.SaveJsonToLocal(taskNode, "localDatas");
    }
    private string tempNodeStr = "Xiao Ming";
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.P))
        {
            TaskNode taskNode= JsonTools.FromFile<TaskNode>(Application.streamingAssetsPath + "/Json/localDatas.json");

            DeleteJsonNode(taskNode.TaskNodeList, tempNodeStr);

            Debug.Log("After deletion--:" + JsonTools.ToJson(taskNode));
            //JsonTools.SaveJsonToLocal(taskNode, "localDatas");
        }
        if (Input.GetKeyDown(KeyCode.L))
        {
            TaskNode taskNode = JsonTools.FromFile<TaskNode>(Application.streamingAssetsPath + "/Json/localDatas.json");

            TaskNode node = new TaskNode("Xiao Ming1", "12345", new List<TaskNode> { new TaskNode("He Xin", "1212") });
            ChangeJsonNode(taskNode.TaskNodeList, tempNodeStr,node);

            Debug.Log("After update--:" + JsonTools.ToJson(taskNode));
        }
    }
    /// <summary>
    /// Update node
    /// </summary>
    /// <param name="taskNodeList"></param>
    /// <param name="nodeStr"></param>
    /// <param name="newTaskNode"></param>
    void ChangeJsonNode(List<TaskNode> taskNodeList, string nodeStr,TaskNode newTaskNode)
    {
        if (taskNodeList != null)
        {
            List<TaskNode> temp = taskNodeList;
            for (int i = 0; i < temp.Count; i + + )
            {
                if (temp[i].TaskNodeName.Equals(nodeStr))
                {
                    temp[i] = newTaskNode;
                }
                else
                {
                    if (temp[i].TaskNodeList != null)
                    {
                        List<TaskNode> temp1 = temp[i].TaskNodeList;
                        for (int j = 0; j < temp1.Count; j + + )
                        {
                            if (temp1[j].TaskNodeName.Equals(nodeStr))
                            {
                                temp1[j] = newTaskNode;
                            }
                            else
                            {
                                ChangeJsonNode(temp1[j].TaskNodeList, nodeStr, newTaskNode);
                            }
                        }
                    }
                }
            }

        }
    }
    /// <summary>
    /// Delete node
    /// </summary>
    /// <param name="taskNodeList"></param>
    /// <param name="nodeStr"></param>
    void DeleteJsonNode(List<TaskNode> taskNodeList, string nodeStr)
    {
        if (taskNodeList != null)
        {
            List<TaskNode> temp = taskNodeList;
            for (int i = 0; i < temp.Count; i + + )
            {
                if (temp[i].TaskNodeName.Equals(nodeStr))
                {
                    taskNodeList.Remove(temp[i]);
                }
            }
            for (int i = 0; i < temp.Count; i + + )
            {
                if (temp[i].TaskNodeList != null)
                {
                    List<TaskNode> temp1 = temp[i].TaskNodeList;
                    for (int j = 0; j < temp1.Count; j + + )
                    {
                        if (temp1[j].TaskNodeName.Equals(nodeStr))
                        {
                            temp1.Remove(temp1[j]);
                        }
                    }
                    for (int j = 0; j < temp1.Count; j + + )
                    {
                        DeleteJsonNode(temp1[j].TaskNodeList, nodeStr);
                    }
                }
            }
        }
    }
}