JSON_QUERY(@data, '$') получить только первый элемент из JSON

У меня есть несколько строк JSON, сгенерированных из MSSQL с WITHOUT_ARRAY_WRAPPER:

{
 "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"
 }
}

Когда я извлекаю данные в первом JSON без использования WITHOUT_ARRAY_WRAPPER, это нормально, но мое приложение.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;
    }

0 ответов

Вместо того, чтобы пытаться сделать это WITHOUT_ARRAY_WRAPPER, я бы оставил это там и вместо этого просто получил первый индекс через C#. Что-то вроде этого:

var response = (await new SQLDataContext().StoredProcedureExecuteReaderAsync<List<SQLDataResult>>("SP_name", parameters))[0];
Другие вопросы по тегам