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];