【发布时间】:2018-02-10 11:50:34
【问题描述】:
我正在尝试为如下层次结构生成 json 字符串:
Company(select * from Company)
Department(select * from Department)
Employee(select * from Employee)
上述每个查询都将返回如下字段:
Company Fields - (Id,Name,Location)
Department Fields - (Id,Name,CompanyId)
Employee Fields - (Id,Name,DepartmentId)
现在我正在尝试为上述实体生成 JSON 字符串,如下所示:
预期输出:
{
"Id": "",
"Name": "",
"Location": "",
"Department":
{
"Id": "",
"Name": "",
"CompanyId": "",
"Employee" :
{
"Id": "",
"Name": "",
"DepartmentId": "",
}
}
}
代码:
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;
}
现在,当我没有任何父母并且想为唯一的孩子生成 json 字符串时,下面的代码可以正常工作:
string json = JsonConvert.SerializeObject(fields.ToDictionary(key => key, v => string.Empty),Formatting.Indented)
输出:
{
"Id": "",
"Name": "",
"Location": "",
}
但现在我想用任何这种内置方式为我的层次结构生成 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
}
【问题讨论】:
-
你也可以分享你的孩子和家长课程吗?
-
@lancew我没有任何问题可以共享子类和父类,但是我对这两个类有不同的结构,因此我正在做一些操作,然后我的 GetColumns 方法基于这些操作返回列。因此我没有共享 Child 和 Parent 类的代码,因为我认为它在这里不相关
-
好吧,也许他们不是。据我所知,您的 GetData 函数似乎具有向后的参数。不应该有一个父母有很多孩子吗?另外,我不确定是否有任何简单的方法可以序列化字符串 List 以获得所需的输出。您必须将列及其值添加到嵌套字典或其他内容中。
-
@lancew 我只希望我的所有值都为空,您能否为您所说的内容添加更多详细信息,例如嵌套字典