C#根据数据生成力引导图

效果:

    public class Rootobject
    {
        public Node[] nodes { get; set; }
        public Link[] links { get; set; }
        public Category[] categories { get; set; }
    }

    /// <summary>
    /// 节点
    /// </summary>
    public class Node
    {
        public string id { get; set; }
        public string name { get; set; }
        public float symbolSize { get; set; }

        public float value { get; set; }
        public int category { get; set; }
    }

    /// <summary>
    /// 关联
    /// </summary>
    public class Link
    {
        public string source { get; set; }
        public string target { get; set; }
    }

    /// <summary>
    /// 分类
    /// </summary>
    public class Category
    {
        public string name { get; set; }
    }

生成Json数据代码

        List<Category> categories = new List<Category>();
        List<Node> nodes = new List<Node>();
        List<Link> links = new List<Link>();
        Rootobject rootobject = new Rootobject();


        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            categories.Clear();
            nodes.Clear();
            links.Clear();

            string[] lines = textBox1.Lines;
            #region 分类
            for (int i = 0; i < lines.Length; i++)
            {
                string[] valueNum = lines[i].Split('#');
                string cateGory = valueNum.LastOrDefault();
                if (string.IsNullOrEmpty(cateGory))
                {
                    continue;
                }
                if (!categories.Any(o => o.name == cateGory))
                {
                    categories.Add(new Category() { name = cateGory });
                }

            }

            #endregion

            #region  节点
            for (int i = 0; i < lines.Length; i++)
            {
                string[] valueNum = lines[i].Split('#');
                var newGroup = valueNum.Reverse().ToArray();
                for (int x = 1; x < newGroup.Length; x++)
                {
                    string cateGory = newGroup[0];
                    var categoryid = categories.FirstOrDefault(o => o.name == cateGory);
                    int maxNode = 0;
                    if (nodes.Any())
                    {
                        maxNode=nodes.Max(p => Convert.ToInt32(p.id));
                        maxNode++;
                    }
                  
                    Node node = nodes.FirstOrDefault(o => o.name == newGroup[x]);
                    if (node == null)
                    {
                        node = new Node()
                        {
                            id = maxNode.ToString(),
                            name = newGroup[x],
                            category = categories.IndexOf(categoryid),
                            symbolSize = 20,
                            value = 2
                        };
                        nodes.Add(node);
                    }
                   
                    if (x == 1)
                    {
                        continue;
                    }
                    else
                    {

                        var parentNode = nodes.FirstOrDefault(o => o.name == newGroup[x - 1]);

                        links.Add(new Link()
                        {
                            source = node.id,
                            target = parentNode.id
                        });
                    }

                }
            }
            #endregion

            rootobject.categories = categories.ToArray();
            rootobject.nodes = nodes.ToArray();
            rootobject.links = links.ToArray();

 
            string json = JsonConvert.SerializeObject(rootobject);
            textBox2.Text = "";
            textBox2.AppendText(json);
        }

 

posted @ 2021-06-08 11:28  在 水 一 方  阅读(140)  评论(0编辑  收藏  举报