c# - 将 JSON 对象发送到 C# WebAPI POST 方法,该方法将通用抽象类作为参数
问题描述
我有一个通用抽象类,它描述了某人将发布到此端点的对象类型,该类如下所示,以及该类可能是的类型示例:
public abstract class Animal<T>
{
public string Name { get; set; }
public virtual T Properties{ get; set; }
}
public class Pig : Animal<List<int>>
{
public Pig()
{
Name = "pigEntity";
Properties = new List<int>();
}
}
下面是我的控制器方法调用 API 端点的样子:
[HttpPost]
[Route("...")]
public async Task<bool> SaveAnimalSetting([FromBody] Animal<JObject> animalType)
{}
尝试通过 Postman 调用此端点时,我返回输入无效,以下是我尝试向其发布的 JSON 对象,它应该与上面的 Pig 对象等效:
{
"key":"pigEntity",
"value":[
1,
2,
3,
4,
5,
6
]
}
有谁知道我哪里出错了,或者当使用通用抽象类作为参数调用端点时,JSON 对象的示例会是什么样子,或者是否有任何其他方法可以做到这一点?我在这里找到了一个线程,其中有人也有一个泛型类,这是他们被推荐的方法,所以尝试做同样的事情。
解决方案
如果您尝试用作输入参数
{
"key":"pigEntity",
"value":[
1,
2,
3,
4,
5,
6
]
}
你可以使用 JObject 但只能这样
public bool SaveAnimalSetting([FromBody] JObject animalType)
{
var key = animalType["key"].ToString();
switch (key)
{
case "pigEntity":
var properties = JsonConvert.DeserializeObject<List<int>> (animalType["value"].ToString());
var pig = new Pig { Properties = properties };
break;
default:
break;
}
}
我很抱歉,但这对我来说没有任何意义。因为每个类都应该有特殊的属性,所以在任何情况下你都应该知道在发送带有输入参数的 json 之前需要创建什么类型。只有当您想在一个请求中创建多个不同的类时,它才会有用。
问题是由于您需要反序列化数据,因此您需要知道用于反序列化的类型。也许您可以使用反射来创建类型,但与使用新的相比,它需要数百更多的时间和资源。我建议只有在没有反射就无法完成任务的情况下才使用反射。
推荐阅读
- github - Jsonnet 的 std.lines(arr) 函数示例
- python - 如何在 Python 中压缩嵌套循环
- python - 如何将csv文件读取到某一行并存储在变量中
- javascript - 如何使用getjson获取json对象
- regex - 正则表达式:如何将字符串作为唯一的有序模式?
- java - 将文本从arraylist添加到textview,并在android中使用逗号作为分隔符
- python - 进化算法python优化问题
- node.js - 调用“C:\Program Files\nodejs\\node.exe”错误
- windows - 为什么我无法运行 dotnet tool install --global bla-bla-bla?
- node.js - 将 json 数据添加到 json 列是添加转义字符