JSON_QUERY(@data,'$')仅从JSON获取第一个元素

时间:2018-06-20 09:00:58

标签: .net sql-server json-query

我有使用WITHOUT_ARRAY_WRAPPER从MSSQL生成的多行JSON:

{
 "fName":"John",
 "lName":"Smith"
},
{
 "fName":"Emma",
 "lName":"Watson"
},
{
 "fName":"Harry",
 "lName":"Potter"
}

接下来在存储过程中,我将使用以下命令构建响应:

select json_query(@data, '$') as data,
@status as status,
@responseMessage as message
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;

但是通过这种方式,我只得到第一个元素:

{
 "data":{
  "fName":"John",
  "lName":"Smith"
 }
}

当我在不使用WITHOUT_ARRAY_WRAPPER的情况下在第一个JSON中提取数据时,就可以了,但是我的.NET应用程序出现异常,结果为空且HTTP500。

我的.NET代码:

    response = await new SQLDataContext().StoredProcedureExecuteReaderAsync<SQLDataResult>("SP_name", parameters);


    public class SQLDataResult
    {
        public SQLDataResult()
        {
            // Status = SQLDataResultStatus.Error;
            status = -1;
            message = "An error occured";
        }

        [JsonProperty("status")]
        // public SQLDataResultStatus Status;
        public int status;

        [JsonProperty("message")]
        public string message;

        [JsonProperty("data")]
        public dynamic data;
    }

1 个答案:

答案 0 :(得分:0)

与其尝试不使用WITHOUT_ARRAY_WRAPPER,而是将其保留在那里,而是通过C#获取第一个索引。像这样:

var response = (await new SQLDataContext().StoredProcedureExecuteReaderAsync<List<SQLDataResult>>("SP_name", parameters))[0];