#c# #json #asp.net-mvc #http-post
Вопрос:
Для функции HttpPost
public async Tasklt;Resultgt; PostAsync([FromBody]Request request, [FromHeader(Name = "Cs-Auth")] string authKey=null) { try{ HttpResponseMessage response = await httpClient.PostAsJsonAsync(_config.ApiUrl, request); response.EnsureSuccessStatusCode(); string responseText = await response.Content.ReadAsStringAsync(); Result result = JsonSerializer.Deserializelt;Resultgt;(responseText); return ProcessResult(result); } catch(Exception e) { _logger.LogError(e.ToString()); throw; } }
Класс запроса:
public class Request { [JsonPropertyName("text")] public string Text { get; set; } [JsonPropertyName("user_id")] public string user_id { get; set; } [JsonPropertyName("rule_id")] public string PolicyId { get; set; } public Policy Policy {get; set;} }
Тело Json:
{ "text": "sample", "user_id": "3455643", ... }
Но запрос, который я получил в PostAsync, выглядит так
Я ожидал «текст», а не «Текст».
Я не хочу менять имя свойства «Текст» в классе запроса на «текст», что мне нужно сделать, чтобы определить поведение сериализации/десериализации?
Ответ №1:
Все работает правильно, ваш отладчик просто показывает данные ПЕРЕД изменением. попробуйте это в своем отладчике
var jsonRequest= JsonConvert.SerializeObject(request); var content = new StringContent(jsonRequest, Encoding.UTF8, "application/json"); var response = await client.PostAsync(_config.ApiUrl, content);
Запрос json
{ "text": "sample", "user_id": "3455643", ... }
Комментарии:
1. Спасибо. Я думаю, что основная причина-PostAsJsonAsync(). Он преобразует объект в Json, но использует JsonSerializerDefaults. Веб, поэтому он может вести себя не так, как я хочу.
2. @Daolin Да, вы правы. Обычно я не использую PostAsJsonAsync . Я предпочитаю сериализовать явно перед отправкой.