c# - Json 文件生成
问题描述
我需要一些帮助来从数据库表生成 JSON 文件。下面是我通过 tsql 代码生成的示例 json(使用 SQL Server 2017)
{ "TBLEMPLOYEES":[
{
"ID":1,
"NAME":"SURESH",
"SALARY":1000,
"ADDRESS":{
"EMP_ADDRESS":"101 A ADDRESS1",
"OTHERS":{
"EMP_PHONE":"987-654-4567",
"EMP_CITY":"CITY1"
}
}
},
{
"ID":2,
"NAME":"RAMESH",
"SALARY":2000,
"ADDRESS":{
"EMP_ADDRESS":"125 A ADDRESS2",
"OTHERS":{
"EMP_PHONE":"588-654-4567",
"EMP_CITY":"CITY2"
}
}
}
] }
下面是我用来在 SSMS 中生成 JSON 输出的 TSQL 代码
SELECT ID AS "ID", EMP_NAME AS "NAME", EMP_SALARY AS "SALARY",EMP_ADDRESS AS "ADDRESS.EMP_ADDRESS", EMP_PHONE AS "ADDRESS.OTHERS.EMP_PHONE", EMP_CITY AS "ADDRESS.OTHERS.EMP_CITY" FROM TBLEMPLOYEES FOR JSON path, root('TBLEMPLOYEES')
现在的问题是,当我尝试使用 C#.net 从 winform 应用程序使用相同的查询时,我没有得到正确的 Json 文件格式。它里面没有数据。
这是我正在使用的代码
var queryWithForJson = "SELECT ID AS \"ID\", EMP_NAME AS \"NAME\", EMP_SALARY AS \"SALARY\",EMP_ADDRESS AS \"ADDRESS.EMP_ADDRESS\", EMP_PHONE AS \"ADDRESS.OTHERS.EMP_PHONE\", EMP_CITY AS \"ADDRESS.OTHERS.EMP_CITY\" FROM TBLEMPLOYEES FOR JSON PATH, ROOT('TBLEMPLOYEES')";
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
var conn = new SqlConnection("Server=localhost\\SQLEXPRESS01;Database=Sample_2018;Trusted_Connection=True;");
var cmd = new SqlCommand(queryWithForJson, conn);
conn.Open();
var jsonResult = new StringBuilder();
var reader = cmd.ExecuteReader();
if (!reader.HasRows)
{
jsonResult.Append("[]");
}
else
{
while (reader.Read())
{
jsonResult.Append(reader.GetValue(0).ToString());
}
}
System.IO.StreamWriter file = new System.IO.StreamWriter(@"D:\Output\TestJson.json");
file.WriteLine(jsonResult.ToString());
请让我知道将 JSON 数据(具有相同格式)从数据库表输出到 JSON 文件的正确程序。
解决方案
这不是您的查询的问题,因为当您直接在 SSMS 上执行或使用 c# 代码时,它会返回相同的 json。
您没有将数据写入 json 文件的主要原因。
因此,您必须使用StreamWriter.Flush();
. 喜欢
System.IO.StreamWriter file = new System.IO.StreamWriter(@"D:\Output\TestJson.json");
file.WriteLine(xml.ToString());
file.Flush(); //<== This method write your buffered stream data to file.
file.Close(); //<== This method closes current stream.
StreamWriter.Flush():
清除当前写入器的所有缓冲区,并导致将任何缓冲数据写入基础流。
简而言之,流中的缓冲数据是通过Flush()
方法写入的。
推荐阅读
- html - 在 EJS 模板脚本标签中填充数据
- r - 热图(geom_tile)产生黑条覆盖图
- javascript - 在给定时间内发送消息(Discord.js)
- c# - 此操作仅允许使用成功验证的上下文
- azure - 如何将转发代理添加到 Azure 应用服务
- c# - Webapi Core 3.1 不会运行 MSB6006“csc.exe”退出,代码为 -2146232797
- excel - 范围对象上的 Excel VBA 错误 1004 使用范围为工作簿级别的范围名称
- angular - 发送 JSON 时,sendcommandtodevice Google Cloud IoT 失败
- jquery - 将字符串值排序到数据表中日期类型列的表底部
- excel - 计算括号内的字符