在服务器端获取 JSON 字符串作为对象并反序列化

Get JSON string as object at server side and deserialize it

我在控制器上有一个接受对象的方法,我需要根据我在 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'.

让您的中间件为您做事。

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

如果你真的想接受泛型对象,你需要先序列化它,然后反序列化它。这是因为它作为匿名对象而不是字符串传递到您的操作方法中。但是在动作签名中使用您键入的模型被认为是更好的做法。

查看官方教程:Create a Web API with ASP.Net Core