如何在 .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.