如何从字符串数组创建json字符串中的层次结构?

Lea*_*sed 8 c# linq json json.net

我正在尝试为层次结构生成json字符串,如下所示:

Company(select * from Company)
    Department(select * from Department)
        Employee(select * from Employee)
Run Code Online (Sandbox Code Playgroud)

以上每个查询都将返回如下字段:

Company Fields -  (Id,Name,Location)
Department Fields - (Id,Name,CompanyId)
Employee Fields - (Id,Name,DepartmentId)
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试为上面的实体生成JSON字符串,如下所示:

预期产量:

{
  "Id": "",
  "Name": "",
  "Location": "",
  "Department": 
        {
           "Id": "",
           "Name": "",
           "CompanyId": "",
           "Employee" : 
               {
                  "Id": "",
                  "Name": "",
                  "DepartmentId": "", 
               }
        }
}
Run Code Online (Sandbox Code Playgroud)

码:

public string GetData(Child model,List<Parent> parents)
        {
           var fields = new List<string[]>();
           if (parents != null)
           {
                foreach (var parent in parents)
                {
                        var columns = GetColumns(parent); //returns string[] of columns
                        fields.Add(columns);
                 }
            }
            fields.Add(GetColumns(model));
            string json = JsonConvert.SerializeObject(fields.ToDictionary(key => key, v => string.Empty),
                                        Formatting.Indented);
            return json;
        }
Run Code Online (Sandbox Code Playgroud)

现在,当我没有任何父母,并希望为唯一的孩子生成json字符串,然后下面的代码工作正常:

string json = JsonConvert.SerializeObject(fields.ToDictionary(key => key, v => string.Empty),Formatting.Indented)
Run Code Online (Sandbox Code Playgroud)

输出:

{
  "Id": "",
  "Name": "",
  "Location": "",
}
Run Code Online (Sandbox Code Playgroud)

但现在我想用任何这样的内置方式为我的层次结构生成JSON.

我知道我可以循环,追加和创建json字符串,但我想以更好的方式做到这一点,就像我为我的孩子所做的那样.

更新:

public class Child
{
    public string Name { get; set; } // Contains Employee
   //Other properties and info related to process sql query and connection string
}


public class Parent
{
    public string Name { get; set; } // Contains Company,Department.
    public string SqlQuery { get; set; } // query related to Company and Department.
    //Other properties and info related to connection string
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*tes 2

也许我错过了一些东西。如果您在层次结构中创建所需的类,用数据实例化它们,然后序列化它们,那么将为您创建结构。

using System.Web.Script.Serialization;

public class Employee 
{
   public int Id {get; set; }
   public string Name {get; set; }
   public int DepartmentId {get; set; }   
}

public class Department 
{
   public int Id {get; set; }
   public string Name {get; set; }
   public string CompanyId {get; set; }
   public List<Employee> {get; set;}
}

public class Company {
   public int Id {get; set; }
   public string Name {get; set; }
   public string Location {get; set; }
   public List<Department> {get; set;}
}

var myCompany = new Company();
// add departments and employees

var json = new JavaScriptSerializer().Serialize(myCompany);
Run Code Online (Sandbox Code Playgroud)