如何在 .Net 中将 SQL 结果用作 JSON
How to use SQL result as JSON in .Net
通过此查询,我能够 select 结果为 JSON。
string strQuery = "declare @json varchar(max) = (select field1 from table1 FOR JSON AUTO)print @json";
如何在 .Net 上使用此结果以及应该使用什么类型的参数而不是 Newtonsoft.Json.Linq.JObject
using (TestEntities objEntities = new TestEntities())
{
Newtonsoft.Json.Linq.JObject strJson = objEntities.Database.SqlQuery<Newtonsoft.Json.Linq.JObject>(strQuery).FirstOrDefault();
Response.Write(strJson.ToString());
}
您应该将其作为字符串读取,然后在需要时将其反序列化。但是在任何情况下你都是 ToString
-ing 它,所以根本没有反序列化它的意义。将其保留为字符串。
此外,PRINT
最大为 8000 字节(4000 个 Unicode 字符),用于信息消息,而不是为数据传输而设计。请改用 SELECT
。
您还应该将 JSON 作为 nvarchar(max)
using (TestEntities objEntities = new TestEntities())
{
const string strQuery = @"
declare @json nvarchar(max) = (
select field1
from table1
FOR JSON AUTO
);
select @json;
";
var result = objEntities.Database.SqlQuery<string>(strQuery).FirstOrDefault();
Response.Write(result);
// alternatively
var strJson = Newtonsoft.Json.Linq.JObject.Parse(result);
}
Don't be tempted to just do a bare SELECT
with FOR JSON
, as it has issues when the result is over 2000 characters. You must put it in a variable first.
通过此查询,我能够 select 结果为 JSON。
string strQuery = "declare @json varchar(max) = (select field1 from table1 FOR JSON AUTO)print @json";
如何在 .Net 上使用此结果以及应该使用什么类型的参数而不是 Newtonsoft.Json.Linq.JObject
using (TestEntities objEntities = new TestEntities())
{
Newtonsoft.Json.Linq.JObject strJson = objEntities.Database.SqlQuery<Newtonsoft.Json.Linq.JObject>(strQuery).FirstOrDefault();
Response.Write(strJson.ToString());
}
您应该将其作为字符串读取,然后在需要时将其反序列化。但是在任何情况下你都是 ToString
-ing 它,所以根本没有反序列化它的意义。将其保留为字符串。
此外,PRINT
最大为 8000 字节(4000 个 Unicode 字符),用于信息消息,而不是为数据传输而设计。请改用 SELECT
。
您还应该将 JSON 作为 nvarchar(max)
using (TestEntities objEntities = new TestEntities())
{
const string strQuery = @"
declare @json nvarchar(max) = (
select field1
from table1
FOR JSON AUTO
);
select @json;
";
var result = objEntities.Database.SqlQuery<string>(strQuery).FirstOrDefault();
Response.Write(result);
// alternatively
var strJson = Newtonsoft.Json.Linq.JObject.Parse(result);
}
Don't be tempted to just do a bare
SELECT
withFOR JSON
, as it has issues when the result is over 2000 characters. You must put it in a variable first.