Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中将层次结构字符串列表转换为JSON#_C#_Json_String_Hierarchical_Delimited - Fatal编程技术网

C# 在C中将层次结构字符串列表转换为JSON#

C# 在C中将层次结构字符串列表转换为JSON#,c#,json,string,hierarchical,delimited,C#,Json,String,Hierarchical,Delimited,我有一个表示分层数据的字符串列表,这些字符串用连字符分隔(3个连字符表示分隔)。我试图将此列表转换为JSON字符串,以便将其绑定到树控件 我正在寻找一个C#示例 列表可以如下所示(列表不是完整的列表,在某些情况下,它可以有7个节点,但您可以理解): 主要技巧是将字符串放入树结构中。下一个代码段(linqpad)就是这样做的。我不知道输出是否是您可以在客户端处理的,但它应该是您可以修改的,因为它适合您 void Main() { var rootNode = new Node("root"

我有一个表示分层数据的字符串列表,这些字符串用连字符分隔(3个连字符表示分隔)。我试图将此列表转换为JSON字符串,以便将其绑定到树控件

我正在寻找一个C#示例

列表可以如下所示(列表不是完整的列表,在某些情况下,它可以有7个节点,但您可以理解):


主要技巧是将字符串放入树结构中。下一个代码段(linqpad)就是这样做的。我不知道输出是否是您可以在客户端处理的,但它应该是您可以修改的,因为它适合您

void Main()
{
    var rootNode = new Node("root");
    foreach(string s in new[] {"Automotive Electronics",
        "Automotive Electronics---Body Electronics",
        "Automotive Electronics---Body Electronics---Access Control Systems",
        "Automotive Electronics---Body Electronics---Body Control Modules",
        "Automotive Electronics---Driver Information",
        "Automotive Electronics---Driver Information---Clocks",
        "Automotive Electronics---Driver Information---Compass Systems",
        "Automotive Electronics---HomeL",
        "Automotive Electronics---Infotainment & Connectivity",
        "Automotive Electronics---Infotainment & Connectivity---Handsfree Systems",
        "Automotive Interiors",
        "Automotive Interiors---Door Panels",
        "Automotive Interiors---Floor Consoles",
        "Automotive Interiors---Headliners & Overhead Systems",
        "Automotive Interiors---Overhead Consoles",
        "Automotive Seating",
        "Automotive Seating---Complete Seats",
        "Automotive Seating---Complete Seats---SuperThin Seats"})
    {
        AddNodes(rootNode, s.Split(new[] {"---"}, StringSplitOptions.RemoveEmptyEntries));
    }
    new JavaScriptSerializer().Serialize(rootNode.Nodes).Dump();
}

public void AddNodes( Node parentNode, string[] names)
{
    if (names.Any())
    {
        var node = parentNode.AddNode(names.First());
        AddNodes(node, names.Skip(1).ToArray());
    }
}

public class Node
{
    public Node(string name)
    {
        Name = name;
        Nodes = new List<Node>();
    }

    public Node AddNode(string name)
    {
        if (!this.Nodes.Select(n => n.Name).Contains(name.Trim()))
        {
            //name.Dump(this.Name);
            this.Nodes.Add(new Node(name.Trim()));
        }
        return this.Nodes.Where (n => n.Name == name).First();
    }

    public string Name { get;set;}
    public List<Node> Nodes { get; set; }
}
void Main()
{
var rootNode=新节点(“根”);
foreach(新[]{“汽车电子”,
“汽车电子——车身电子”,
“汽车电子——车身电子——门禁系统”,
“汽车电子-车身电子-车身控制模块”,
“汽车电子-驾驶员信息”,
“汽车电子-驾驶员信息-时钟”,
“汽车电子-驾驶员信息-指南针系统”,
“汽车电子——荷马”,
“汽车电子——信息娱乐与连接”,
“汽车电子——信息娱乐与连接——免提系统”,
“汽车内饰”,
“汽车内饰-门板”,
“汽车内饰-地板控制台”,
“汽车内饰——顶篷衬里和顶置系统”,
“汽车内饰-顶置控制台”,
“汽车座椅”,
“汽车座椅——全套座椅”,
“汽车座椅-全套座椅-超薄座椅”})
{
AddNodes(rootNode,s.Split(new[]{“--”},StringSplitOptions.RemoveEmptyEntries));
}
新的JavaScriptSerializer().Serialize(rootNode.Nodes).Dump();
}
public void AddNodes(节点parentNode,字符串[]名称)
{
if(name.Any())
{
var node=parentNode.AddNode(names.First());
AddNodes(node,names.Skip(1.ToArray());
}
}
公共类节点
{
公共节点(字符串名称)
{
名称=名称;
节点=新列表();
}
公共节点AddNode(字符串名称)
{
如果(!this.Nodes.Select(n=>n.Name).Contains(Name.Trim()))
{
//name.Dump(this.name);
添加(新节点(name.Trim());
}
返回this.Nodes.Where(n=>n.Name==Name).First();
}
公共字符串名称{get;set;}
公共列表节点{get;set;}
}
输出:

[{“名称”:“汽车电子”,“节点”:[{“名称”:“车身电子”,“节点”:[{“名称”:“门禁系统”,“节点”:[]},{“名称”:“车身控制模块”,“节点”:[]},{“名称”:“驾驶员信息”,“节点”:[{“名称”:“时钟”,“节点”:[]},{“名称”:“指南针系统”,“节点”:[]},{“名称”:“家庭”,“节点”:[]},{“信息娱乐与连接”,“节点”:[{“名称”:“免提系统”,“节点”:[]}]},{“名称”:“汽车内饰”,“节点”:[{“名称”:“门板”,“节点”:[]},{“名称”:“地板控制台”,“节点”:[]},{“名称”:“车顶衬里和头顶系统”,“节点”:[]},{“名称”:“头顶控制台”,“节点”:[]},{“名称”:“汽车座椅”,“节点”:[{“名称”:“完整座椅”,“节点”:[{“名称”:”超薄座椅“,”节点“:[]}]}]}]


(请注意,对于
JavaScriptSerializer
,必须在linqpad中导入一些名称空间才能运行此代码段).

这个数据会经常变化吗?你会输入这个还是从另一个来源提取它?它来自一个数据库,所以它有可能发生变化…我基本上是把这些从数据库中提取出来作为一个列表好了,它们会以分层的形式出现吗?它们会像我上面的列表一样出现…也就是说,已经按顺序出现了r、 父母总是在孩子之前。你期望的输出是什么?我想你会喜欢某种格式的输出(这里没有提供)。
void Main()
{
    var rootNode = new Node("root");
    foreach(string s in new[] {"Automotive Electronics",
        "Automotive Electronics---Body Electronics",
        "Automotive Electronics---Body Electronics---Access Control Systems",
        "Automotive Electronics---Body Electronics---Body Control Modules",
        "Automotive Electronics---Driver Information",
        "Automotive Electronics---Driver Information---Clocks",
        "Automotive Electronics---Driver Information---Compass Systems",
        "Automotive Electronics---HomeL",
        "Automotive Electronics---Infotainment & Connectivity",
        "Automotive Electronics---Infotainment & Connectivity---Handsfree Systems",
        "Automotive Interiors",
        "Automotive Interiors---Door Panels",
        "Automotive Interiors---Floor Consoles",
        "Automotive Interiors---Headliners & Overhead Systems",
        "Automotive Interiors---Overhead Consoles",
        "Automotive Seating",
        "Automotive Seating---Complete Seats",
        "Automotive Seating---Complete Seats---SuperThin Seats"})
    {
        AddNodes(rootNode, s.Split(new[] {"---"}, StringSplitOptions.RemoveEmptyEntries));
    }
    new JavaScriptSerializer().Serialize(rootNode.Nodes).Dump();
}

public void AddNodes( Node parentNode, string[] names)
{
    if (names.Any())
    {
        var node = parentNode.AddNode(names.First());
        AddNodes(node, names.Skip(1).ToArray());
    }
}

public class Node
{
    public Node(string name)
    {
        Name = name;
        Nodes = new List<Node>();
    }

    public Node AddNode(string name)
    {
        if (!this.Nodes.Select(n => n.Name).Contains(name.Trim()))
        {
            //name.Dump(this.Name);
            this.Nodes.Add(new Node(name.Trim()));
        }
        return this.Nodes.Where (n => n.Name == name).First();
    }

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