简体   繁体   English

将数组变成POCO对象

[英]Turn array into a POCO object

I'm having trouble converting the following string array into a POCO object. 我无法将以下字符串数组转换为POCO对象。 Given the following: 给定以下内容:

string files = [
  "./Folder/file.ext",
  "./Folder/file2.ext",
  "./Folder/file3.ext",
  "./Folder/nestedfolder/file.ext",
  "./Folder2/file1.ext",
  "./Folder2/file2.ext",
  "./file1.ext",
  "./file2.ext",
  "./file3.ext",
];

I would like to convert it to something like: 我想将其转换为:

public class HierarchicalSource{

    public List<HierarchicalSource> Children = new List <HierarchicalSource> ();

    public bool folder { get; set; }

    public string FullPath;

    public HierarchicalSourceSource(string path) {

        this.FullPath = path;

    }

}

Where HierarchicalSource is the root, and has a list of children 其中,HierarchicalSource是根,并具有子级列表

UPDATE: 更新:

I ended up changing the list to a dictionary. 我最终将列表更改为字典。 There must be a more efficient way to do this, but I did as follows: 必须有一种更有效的方法来执行此操作,但是我这样做如下:

 string fileList = files.Select(x => x.Remove(0, 2)).ToArray();


                var root = new HierarchicalSource("root");

                foreach(var f in fileList){

                var current = root;
                    string[] splitFile = f.Split('/');
                    foreach(var s in splitFile){
                        if(!current.Children.ContainsKey(s)){


                        current.Children.Add(s, new List<HierarchicalSource>{ new HierarchicalSource(s) }); 
                        }

                        current = current.Children[s].Last();

                    }

                }

POCO: POCO:

public class HierarchicalSource{

    public string name;

    public Dictionary<string, List<HierarchicalSource>> Children = new Dictionary<string, List<HierarchicalSource>>();

    public HierarchicalSource(string name){

        this.name = name;
    }
}

If I understand you correctly, this requires looping through the array, but it'll allow you to parse each item in the array so you can generate the HierarchicalNode object's values. 如果我对您的理解正确,则需要遍历整个数组,但这将允许您解析数组中的每个项目,以便生成HierarchicalNode对象的值。

var node = new HierarchicalSource();

foreach(var str in files)
{
    var pathParts = str.Split('/').ToList();

    node.Children.Add(new HierarchicalNode()
    { 
        FullPath = str,
        Folder = pathParts[1] // you may need to do some debugging to see what the results for pathParts are instead of just [#]
    });
}

Since the FullPath member in HierarchicalNode is public you can set that value without having to go through any constructor. 由于HierarchicalNode中的FullPath成员是公共的,因此您可以设置该值,而不必通过任何构造函数。

// using the above code for reference
node.FullPath = whateverThePathYouNeedIs;

Also update that property in the class to use getters and setters 还更新类中的该属性以使用getter和setter

public string FullPath { get; set; } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM