【问题标题】:Json File GenerationJson 文件生成
【发布时间】:2018-11-30 11:05:21
【问题描述】:

我需要一些帮助来从数据库表生成 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 文件的正确程序。

【问题讨论】:

  • reader.HasRows 的价值是什么?如果是真的,那么在 reader.Read() 之后 jsonResult 的值是什么

标签: c# json serialization json.net


【解决方案1】:

这不是您查询的问题,因为当您直接在 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() 方法写入的。

【讨论】:

  • 谢谢!它的工作,我得到了正确格式的正确输出文件。小错误我错过了..
  • 如果我的回答对您有帮助,请标记答案左侧的勾号,使其变为绿色,然后通过单击向上箭头进行投票。 :)
猜你喜欢
  • 2018-12-30
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多