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