Я звоню в веб-службу и получаю следующие ответы Json
{"handler":{"name":"abc"},"intent":{"name":"actions.intent.MAIN","params":{},"query":"Mit Google sprechen"},"scene":{"name":"actions.scene.START_CONVERSATION","slotFillingStatus":"UNSPECIFIED","slots":{},"next":{"name":"Start_Frage"}},"session":{"id":"ABwppHHVumDrliLJaLSikS6KnIlN7yYv6Z4XJCOYzEZt8Fr08RH6r0wtM2-E0v40lS2p1YosTDfpSCd5Lw","params":{},"typeOverrides":[],"languageCode":""},"user":{"locale":"de-DE","params":{},"accountLinkingStatus":"ACCOUNT_LINKING_STATUS_UNSPECIFIED","verificationStatus":"VERIFIED","packageEntitlements":[],"gaiamint":"","permissions":[],"lastSeenTime":"2021-04-01T10:06:59Z"},"home":{"params":{}},"device":{"capabilities":["SPEECH","RICH_RESPONSE","LONG_FORM_AUDIO"]}}
Я использовал https://json2csharp.com/ для преобразования моей строки Json в классы C#
public class Handler
{
public string name { get; set; }
}
public class Params
{
}
public class Intent
{
public string name { get; set; }
public Params @params { get; set; }
public string query { get; set; }
}
public class Slots
{
}
public class Next
{
public string name { get; set; }
}
public class Scene
{
public string name { get; set; }
public string slotFillingStatus { get; set; }
public Slots slots { get; set; }
public Next next { get; set; }
}
public class Session
{
public string id { get; set; }
public Params @params { get; set; }
public List<object> typeOverrides { get; set; }
public string languageCode { get; set; }
}
public class User
{
public string locale { get; set; }
public Params @params { get; set; }
public string accountLinkingStatus { get; set; }
public string verificationStatus { get; set; }
public List<object> packageEntitlements { get; set; }
public string gaiamint { get; set; }
public List<object> permissions { get; set; }
public DateTime lastSeenTime { get; set; }
}
public class Home
{
public Params @params { get; set; }
}
public class Device
{
public List<string> capabilities { get; set; }
}
public class Root
{
public Handler handler { get; set; }
public Intent intent { get; set; }
public Scene scene { get; set; }
public Session session { get; set; }
public User user { get; set; }
public Home home { get; set; }
public Device device { get; set; }
}
Но как именно мне преобразовать мой ответ Json в объект C#? Затем внести в него какие-либо изменения и, наконец, отправить ответ? Я новичок в программировании, поэтому пример Step by Step был бы очень полезен
Мой текущий класс выглядит так. Тело переменной содержит ответ Json.
public class GoogleController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
var result = new Result();
result.Value1 = 123;
return Ok(result);
}
[HttpPost]
public async Task<IActionResult> PostWebHook()
{
string body;
using (var reader = new StreamReader(Request.Body))
{
body = await reader.ReadToEndAsync();
}
return Ok("Test123");
}
}
Вам не нужно явно десериализовать содержимое запроса. Если действие принимает объект, соответствующий телу JSON, ASP.NET автоматически десериализует его.
Возможно, было бы неплохо пройти через несколько базовых руководств по MVC. Это очень важно для того, как это работает.





https://json2csharp.com/ добавляет в первую строку команду, например:
Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse);
Эта строка используется для десериализации текста.
Ваш должен быть таким:
var myDeserializedClass = JsonConvert.DeserializeObject<Root>(body);
Это очень ручная работа, основанная на использовании JSON.Net. Вместо этого просто позвольте структуре сделать это за вас, как показывает другой ответ.
@DavidG, ты прав, ответ лучше
Используйте атрибут FromBody для десериализации тела
[HttpPost]
public async Task<IActionResult> PostWebHook([FromBody] Root root)
{
// root is deserialized body
// modify root
...
return Ok(root);
}
Как насчет использования
JsonConvert.DeserializeObject?