#c# #json #asp.net-core-webapi #restsharp
#c# #json #asp.net-core-webapi #restsharp
Вопрос:
Я использую библиотеку RestSharp для выполнения запросов к WebAPI. Вот как я это делаю:
var client = new RestClient(url);
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", autentication);
RestSharp.IRestResponse response = client.Execute(request);
Это работает хорошо до этого момента. Проблема, с которой я сталкиваюсь, заключается в том, что содержимое ответа возвращается следующим образом:
string jsonObject2 = ""{\"status\":\"success\",\"entities\":[{\"bank_code\":2,\"name\":\"BANK 02\"},{\"bank_code\":3,\"name\":\"BANCK 03\"},{\"bank_code\":4,\"name\":\"BANCK 04\"}]}"";
Response.content добавляет еще 2 и когда я попытался десериализовать, и он выдает исключение, что он не может преобразовать строку в мою модель.
Как я могу решить, что содержимое возвращается в этом формате?
string jsonObject = "{"status":"success","entities":[{"bank_code":2,"name":"BANK 02"},{"bank_code":3,"name":"BANK 03"},{"bank_code":4,"name":"BANK 04"}]}";
Этот формат я могу десериализовать из-за правильного формата string json.
Комментарии:
1. Похоже, ваш API возвращает не JSON, а скорее экранированную строку. Является ли API вашим собственным?
2. API — это существующий проект, и когда я тестирую в POSTMAN, он работает должным образом.
3. Под «должным образом» вы подразумеваете, что вы получаете
"{"status":"success","entities":[{"bank_code":2,"name":"BANK 02"},{"bank_code":3,"name":"BANK 03"},{"bank_code":4,"name":"BANK 04"}]}"
? Потому что это не JSON и не будет десериализовано правильно.4. Но работает при десериализации с использованием JsonConvert. Десериализуйте объект. Не работает, только если в содержимом есть еще две косые черты в строке, подобной этой «\»
5. Пожалуйста, попробуйте использовать «return Content(result, «application / json»);» имеет ваш возвращаемый тип.
Ответ №1:
Это работает, когда я десериализую содержимое, возвращающее API, в строку, а затем снова десериализую строку в тип модели, который я хочу.
string jsonData = JsonConvert.DeserializeObject<string>(restResponse.Content);
EntidadResponse data = JsonConvert.DeserializeObject<EntidadResponse>(jsonData);
Ответ №2:
string result = string.Empty;
using (var reader = new StreamReader(await responseContent.ReadAsStreamAsync()))
{
result = await reader.ReadToEndAsync();
}
return Content(result, "application/json");