0

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

1 回答 1

0

让你的中间件为你做它的事情。

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

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

查看这个官方教程:使用 ASP.Net Core 创建 Web API

于 2019-10-27T09:20:12.107 回答