我正在使用SQL Server 2008 R2,我想在ASP.NET中构建一个Web表单,在我的数据库上运行SELECT
命令并从中创建一个json。
这是我的代码:
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
String query = "SELECT * FROM dbo.apartments FOR JSON";
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
var jsonResult = new StringBuilder();
var reader = command.ExecuteReader();
if (!reader.HasRows)
{
jsonResult.Append("[]");
}
else
{
while (reader.Read())
{
jsonResult.Append(reader.GetValue(0).ToString());
}
}
connection.Close();
}
}
当我运行它时,我收到此错误:
异常详细信息:System.Data.SqlClient.SqlException:'JSON'附近的语法不正确。
正如Lennart Stoop建议的选项是读取对象的所有项目,然后使用JSON.NET序列化为Json。
Nuget package needed NewtonSoft.Json
using Newtonsoft.Json;
例子是
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
String query = "SELECT * FROM dbo.apartments";
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
List<MyObject> myObjectList= new List<MyObject>();
var reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{ MyObject myObject = new MyObject();
myObject.Name = reader["Name"].ToString();
myObjectList.Add(myObject);
}
}
var JsonResult = JsonConvert.SerializeObject(myObjectList);
}
}
JsonResult是你想要的json对象
编辑修改为与List一起使用以获得更好的示例
我认为您使用的是旧版本的SQL Server。 JSON功能已添加到SQL版2016。
将查询结果格式化为带有FOR JSON的JSON可用starting with 2016。您可以使用SqlDataReader
读取数据,然后使用C#代码手动创建json
(例如,使用Json.Net,请参阅Creating JSON)