2

我使用 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 应用程序出现异常,结果为空且 HTTP 500。

我的 .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;
    }
4

1 回答 1

0

我不会尝试在没有_ARRAY_WRAPPER 的情况下执行此操作,而是将其保留在那里,然后通过 C# 获取第一个索引。像这样的东西:

var response = (await new SQLDataContext().StoredProcedureExecuteReaderAsync<List<SQLDataResult>>("SP_name", parameters))[0];
于 2019-01-23T20:20:52.387 回答