Search code examples
c#jsondirectory-structurecascadingdropdown

How can I create aJSON Object from Folder Structure


I have folder structure as follow:

 - directory1
     - subdirectory1
        - sub-subdirectory1
        - sub-subdirectory2
     - subdirectory2
     - subdirectory3
 - directory2
     - subdirectory1
        - sub-subdirectory1
        - sub-subdirectory2
        - sub-subdirectory3
    - sub-subdirectory2
     - subdirectory2
     - subdirectory3

I want to Automate getting the folder structure in C#, so as to populate the cascading dropdown, then parse the structure to the dropdown HTML, using JavaScript. here is the object I want to create based on my directories:

{
  "directory1": {
    "subdirectory1": ["sub-subdirectory1", "sub-subdirectory2", "sub-subdirectory3"],
    "subdirectory2": ["sub-subdirectory1", "sub-subdirectory2", "sub-subdirectory3"],
    "subdirectory3": ["sub-subdirectory1", "sub-subdirectory2", "sub-subdirectory3"]    
  },
  "directory2": {
    "subdirectory1": ["sub-subdirectory1", "sub-subdirectory2", "sub-subdirectory3"] ,
    "subdirectory2": ["sub-subdirectory1", "sub-subdirectory2", "sub-subdirectory3"] 
  }

No Hard Coding, how can I create this nested json Object from directory structure in C#


Solution

  • If directories is all you are interested in, I'd serialize a model like this:

    public class MyDirModel
    {
        public string Name {get; set;}
        public List<MyDirModel> SubDirectories {get; set;} = new List<MyDirModel>();
    }
    

    That would not produce exactly your JSON, but - what I think to be - an even better one, since you won't be restricted to 3 layers of depth.

    To be more specific, this would then probably look like:

    [
      {
        "name": "directory1",
        "subdirectories": [
        { "name": "subdirectory1",
          "subdirectories": [
            { "name": "sub-subdirectory1", "subdirectories": [] },
            { "name": "sub-subdirectory2", "subdirectories": [] },
            { "name": "sub-subdirectory3", "subdirectories": [] }
           ]},
        { "name": "subdirectory2",
          "subdirectories": []},
        { "name": "subdirectory3",
          "subdirectories": []}  
        ]
      },
      { 
        name: "directory2",
        subdirectories: [ /* shortened for brevity */  ]
      }
    ]