在服务器端获取 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)
{
...
}
如果你真的想接受泛型对象,你需要先序列化它,然后反序列化它。这是因为它作为匿名对象而不是字符串传递到您的操作方法中。但是在动作签名中使用您键入的模型被认为是更好的做法。
我在控制器上有一个接受对象的方法,我需要根据我在 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)
{
...
}
如果你真的想接受泛型对象,你需要先序列化它,然后反序列化它。这是因为它作为匿名对象而不是字符串传递到您的操作方法中。但是在动作签名中使用您键入的模型被认为是更好的做法。