Получить строку JSON как объект на стороне сервера и десериализовать ее - PullRequest
0 голосов
/ 27 октября 2019

У меня есть метод на контроллере, который принимает объект, и мне нужно десериализовать по-разному в зависимости от того, как я создаю службу в DI. Метод bool SetSnmpRequest(Object obj);

Затем в контроллере

public IActionResult Set([FromBody]object details)
    {
        bool setSuccesses = _devicesManager.SetSnmpRequest(details);

        if (setSuccesses)
            return Ok();

        return BadRequest();
    }

Это JSON, переданный от клиента {"Name":"Power" ,"Value":"MED","ChannelIndex":"1"}

И объект, который я пытаюсьдесериализация до

public class SetRequestModel
        {
            public string Name { get; set; }
            public string Value { get; set; }
            public int ChannelIndex { get; set; } = 0;
        }

десериализация SetRequestModel details = JsonConvert.DeserializeObject<SetRequestModel>((string)obj);

Проблема вообще в том, что JsonConvert.DeserializeObject принимает строку, и я получаю исключение при приведении объекта к строке

System.InvalidCastException: Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'System.String'.

1 Ответ

0 голосов
/ 27 октября 2019

Просто позвольте вашему промежуточному программному обеспечению сделать то, что вам нужно.

public IActionResult Set([FromBody]SetRequestModel details)
{
    ...
}

Если вы действительно хотите взять общий объект, вам сначала нужно его сериализовать, а затем десериализовать. Это потому, что он передается в ваш метод действия как анонимный объект, а не как строка. Но использование ваших типизированных моделей в сигнатуре действия считается лучшей практикой.

Ознакомьтесь с официальным руководством: Создание веб-API с ASP.Net Core

...