Как сделать так, чтобы контроллер сам выбирал класс который подходит по параметрам в json
В заголовке не совсем понятно объяснил, но я не смог скомпоновать проблему в одну строчку) Есть один метод в контроллере, который в себя принимает некоторый Response, который содержит поля type и object. Запросы отправляемые в этот меняются в зависимости от type. Допустим
{
"type":"info",
"object": {
"id": "111",
"name": "111"
}
}
Другой type, например не info, а message будет содержать допустим user_id, message. Как мне формировать класс? Просто закидать туда все возможные варианты запроса?
public class Response
{
public string type {get; set;}
[JsonPropertyName("object")]
public Object Object { get; set; }
}
public class Object
{
public int id {get; set;}
public string name {get; set;}
public string user_name {get; set;}
public string message {get; set;}
}
По-моему это странно. Если будет много параметров то класс будет очень большим и можно легко запутаться в нем. И выглядит не красиво. Хочется видеть интерфейс response и классы message, info (те что в type), но это не работает так как я хочу. Сделать так, чтобы message прокидывался на отдельный метод TestForMessage я не могу. Все должно идти в один общий метод.
[HttpPost]
[Route("test")]
public IActionResult Test([FromBody] Response response)
{
return Ok();
}
Ответы (1 шт):
Если трудно натянуть данные на конкретную модель, можно использовать JToken:
JToken responseObject = JToken.Parse(response);
if(responseObject.Value<string>("type") == "message"){
}
или
switch (responseObject.Value<string>("type"))
{
case 1:
Console.WriteLine("info");
break;
case 2:
Console.WriteLine("message");
break;
default:
Console.WriteLine("Default case");
break;
}