Как сохранить/прочитать свойства узла TreeView в файл json?

205
12 марта 2019, 18:50

Сохранить

// Сохранить в 
        private void button3_Click(object sender, EventArgs e)
        {   
            this.treeView1.Save(jsonFilePath);
        }

Прочитать

// Прочитать
        private void button4_Click(object sender, EventArgs e)
        {
            this.treeView2.Nodes.Clear();
            this.treeView2.Load(jsonFilePath);
        }

Класс TreeRepository.cs

public static class TreeRepository
    {
        public class DataNode
        {
            public string Text { get; set; }
            public bool IsChecked { get; set; }
            // public bool IsExpanded { get; set; }
            public bool IsExpanded { get; set; }
            public bool IsSelected  { get; set; }
            public List<DataNode> Children { get; set; }
        }
        public static List<DataNode> LoadDataNodes(string jsonFilePath)
        {
            var json = System.IO.File.ReadAllText(jsonFilePath);
            var dataNodes = JsonConvert.DeserializeObject<List<DataNode>>(json);
            return dataNodes;
        }
        public static void Load(this TreeView treeView, string jsonFilePath)
        {
            treeView.Nodes.Load(LoadDataNodes(jsonFilePath));
        }
        public static void Load(this TreeNodeCollection nodes, List<DataNode> dataNodes)
        {
            foreach (var dataNode in dataNodes)
            {
                var treeNode = nodes.Add(dataNode.Text);
                treeNode.Checked = dataNode.IsChecked;
                    treeNode.IsExpanded = dataNode.IsExpanded;
                if (dataNode.Children != null && dataNode.Children.Count > 0)
                {
                    Load(treeNode.Nodes, dataNode.Children);
                }
                if (dataNode.IsSelected)
                {
                    treeNode.IsSelected = true;
                } 
            }
        }

        public static List<DataNode> GetDataNodes(this TreeView treeView)
        {
            var dataNodes = new List<DataNode>();
            AddNodesToList(treeView.Nodes, dataNodes);
            return dataNodes;
        }
        private static void AddNodesToList(TreeNodeCollection nodes, List<DataNode> dataNodes)
        {
            foreach (TreeNode node in nodes)
            {
                var dataNode = new DataNode
                {
                    Children = new List<DataNode>(),
                    IsChecked = node.Checked,
                    IsExpanded = node.IsExpanded,
                    IsSelected = node.IsSelected,
                    Text = node.Text
                };
                dataNodes.Add(dataNode);
                if (node.Nodes.Count > 0)
                {
                    AddNodesToList(node.Nodes, dataNode.Children);
                }
            }
        }
        public static void Save(this TreeView treeView, string jsonFilePath)
        {
            var dataNodes = treeView.GetDataNodes();
            var json = JsonConvert.SerializeObject(dataNodes, Formatting.Indented);
            System.IO.File.WriteAllText(jsonFilePath, json);
        }

    }

В выражении

treeNode.IsExpanded = dataNode.IsExpanded;

Ошибка: CS0200 Невозможно присвоить значение свойству или индексатору "TreeNode.IsExpanded" — доступ только для чтения.

Как исправить ошибку?

READ ALSO
Оптимизация перебора всех элементов Dictionary&lt;T,T&gt;

Оптимизация перебора всех элементов Dictionary<T,T>

Есть класс мира, в котором находится словарик форм жизниКаждый Update в классе мира вызывается foreach, который перебирает все формы жизни и производит...

144
WPF синхронизация коллекций из Model и ViewModel

WPF синхронизация коллекций из Model и ViewModel

разбираюсь в паттерне MVVM, подскажите, как правильно реализовать связь между коллекциями Model и ViewModelДопустим, в Model у меня есть коллекция, которая...

130
Autofac: регистрация типа InstancePerRequest

Autofac: регистрация типа InstancePerRequest

ASPNET WebApi2, контроллер

189
Спавн пули относительно оружия

Спавн пули относительно оружия

Столкнулся с такой проблемой: Есть космический корабль, у него есть дочерние объекты - орудия на нужных позицияхНо пули спавнятся не там где...

170