我正在用C#构建Web应用程序以生成JSON字符串。我有一个带有列的SQL Server表ID, Columnname, Parent ID, Value。
对于特定的ID,如果Id = parentId,则它是父列,而如果id!= parentid,则它是子项并具有父项。我将它们拉入数据表,从中我需要在标签中打印JSON字符串。
GetJSON表
Id Columnname ParentId Value
----------------------------------
1 Parent1 1 100
2 Parent2 2
3 Child1 2 300
4 Child2 2 400
输出JSON
{
"Parent1" : "100",
"Parent2" : {
"child1" : "300",
"child2" : "400"
}
}
C#数据表
SqlCommand Fieldextract = new SqlCommand(Select * from GetJSON, sqlcon);
Dataset ds1 = new DataSet();
SqlDataAdapter = JSONInfoAdapter ;
JSONInfoAdapter = new SQLDataAdapter(FieldExtract);
JSONInfoAdapter.fill(ds1);
FieldExtract.Dispose();
JSONInfoAdapter = null;
DataTable JSONInfoTable = ds1.Table[0];
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要实现这个需求,你可以使用递归方法来遍历数据表并构建JSON字符串。以下是一个简单的C#示例代码,展示了如何从你提供的数据表结构生成所需的JSON字符串:
using System;
using System.Data;
using Newtonsoft.Json.Linq;
public class Program
{
public static void Main()
{
// 假设这是你从数据库获取的数据表
DataTable JSONInfoTable = new DataTable();
JSONInfoTable.Columns.Add("Id", typeof(int));
JSONInfoTable.Columns.Add("Columnname", typeof(string));
JSONInfoTable.Columns.Add("ParentId", typeof(int));
JSONInfoTable.Columns.Add("Value", typeof(string));
// 示例数据填充
JSONInfoTable.Rows.Add(1, "Parent1", 1, "100");
JSONInfoTable.Rows.Add(2, "Parent2", 2, "");
JSONInfoTable.Rows.Add(3, "Child1", 2, "300");
JSONInfoTable.Rows.Add(4, "Child2", 2, "400");
// 调用方法生成JSON
JObject json = BuildJson(JSONInfoTable);
Console.WriteLine(json.ToString());
}
private static JObject BuildJson(DataTable dt)
{
JObject jsonObject = new JObject();
foreach (DataRow row in dt.Rows)
{
int id = Convert.ToInt32(row["Id"]);
string columnName = row["Columnname"].ToString();
int parentId = Convert.ToInt32(row["ParentId"]);
string value = row["Value"].ToString();
if (parentId == id) // 父节点
{
jsonObject.Add(columnName, string.IsNullOrEmpty(value) ? new JObject() : JToken.FromObject(value));
}
else // 子节点
{
JObject parentJson;
if (!jsonObject.TryGetValue(parentName, out JToken parentToken))
{
parentJson = new JObject();
jsonObject.Add(parentName, parentJson);
}
else
{
parentJson = (JObject)parentToken;
}
parentJson.Add(columnName, string.IsNullOrEmpty(value) ? new JObject() : JToken.FromObject(value));
}
}
return jsonObject;
}
}
这段代码首先定义了一个BuildJson
方法,它接收一个DataTable
作为输入,并通过遍历每一行来构建JSON对象。如果ParentId
等于Id
,则该行被视为父节点;否则,它被视为子节点,并被添加到相应的父节点下。
请注意,此代码使用了Newtonsoft.Json.Linq
命名空间下的JObject
和JToken
类来构造JSON,因此你需要确保你的项目中已经引用了Newtonsoft.Json库。如果你的环境中没有这个库,可以通过NuGet包管理器安装它。