如何存储类层次结构,以便最有效地生成树?

时间:2011-11-10 07:57:37

标签: c# javascript

List<myObject> objects = new List<myObject>

myObject
{
    string a;
    string b;
}

a包含objects[i]的名称,b包含objects[i]的父级名称。

如何将此列表序列化为文件,以便稍后创建树状图像?

例如,objects列表包含四个元素:

{a=planet, b=solarsystem}, 
{a=moon, b=planet}
{a=solarsystem, b=universe}
{a=meteor, b=solarsystem}

我想序列化这个以便稍后我可以使用javascript读取文件并获得足够的信息来生成此图表:

tree

2 个答案:

答案 0 :(得分:1)

如果我是你,我会这样设计:

我会有一个C#类,稍后会被序列化为JSON并在JavaScript上使用它

基本上我们将使用对象定义层次结构,这就是所谓的对象图。

看起来,您提到的对象属于同一类型,因此我们将其称为Node

public class Node {
    public string Name { get; set; }
    public List<Node> ChildNodes { get; set; }
}

使用它,创建对象层次结构:

private Node CreateXBonezNodes() {
    Node universeNode = new Node("Universe");
    Node solarSystemNode = new Node("Solar System");
    Node planetNode = new Node("Planet");
    Node meteorNode = new Node("Meteor");
    Node moonNode = new Node("Moon");

    //Now define the hierarchy
    universeNode.ChildNodes.Add(solarSystemNode);
    solarSystemNode.ChildNodes.Add(planetNode);
    solarSystemNode.ChildNodes.Add(meteorNode);
    planetNode.ChildNodes.Add(moonNode);

    return universeNode;
}

当你将对象序列化为JSON时,你会期望得到这个

{
    Name: "Universe",
    ChildNodes: [
        {
            Name: "Solar System",
            ChildNodes: [
                {
                    Name: "Planet",
                    ChildNodes: [
                        {
                            Name: "Moon",
                            ChildNodes: []
                        }
                    ]
                },
                {
                    Name: "Meteor",
                    ChildNodes: []
                }
            ]
        }
    ]
}

将此JSON反序列化为JS对象时,只需遍历ChildNodes属性即可轻松访问对象图。

希望这有帮助

答案 1 :(得分:0)

您应该处理对象服务器端以获得真正的树节点,即

myObject
{
  string name;
  List<myObject> children;
}

如果您的序列化库知道如何将其发送到客户端,那么在树客户端显示数据将非常简单。