首页 新闻 会员 周边

.net core webapi post json参数如何根据某固定字段转换成指定的类型

0
悬赏园豆:5 [已解决问题] 解决于 2023-09-16 16:13

前端post过来的数据如下:
{
"optType": "add",
"sn": "00000001",
"poi": "xxxx",
"data":{

}
}

参数里面data是可变的,而且类型不固定,根据optType判断不同的操作,从而将data序列化成指定的类型,后端该怎么接收数据,模型该怎么写:
class XXX{
public string OptType{get;set;}
public string Sn{get;set;}
public T Data{get;set;}
}
这样能获取到OptType的值,但是这个Data该怎么转换?

雪山浪子的主页 雪山浪子 | 初学一级 | 园豆:37
提问于:2023-09-15 15:17
< >
分享
最佳答案
0

要根据 optType 的值将 data 字段序列化为不同的类型,您可以使用泛型类型参数来定义 Data 属性,但是这样做需要一些额外的处理。首先,您可以创建一个基类,然后从该基类派生具体的数据类型。接下来,您可以使用条件语句或反射来将 data 字段的值转换为正确的数据类型。

下面是一个示例代码,演示了如何实现这一功能:

csharp

public class MyData
{
// 具体的数据字段可以根据您的需求定义
}

public class XXX<T>
{
public string OptType { get; set; }
public string Sn { get; set; }
public T Data { get; set; }
}

public class MyController : ControllerBase
{
[HttpPost]
public IActionResult MyAction([FromBody] XXX<object> requestData)
{
// 根据 OptType 判断要将 Data 转换为哪种类型
switch (requestData.OptType)
{
case "add":
// 将 Data 转换为 MyData 类型
if (requestData.Data is Newtonsoft.Json.Linq.JObject jObject)
{
requestData.Data = jObject.ToObject<MyData>();
}
break;
// 可以根据不同的 OptType 添加其他情况
}

    // 现在 requestData.Data 将包含正确的类型
    // 进行进一步的处理
    return Ok();
}

}
在上面的示例中,我们首先定义了一个基类 MyData,然后在 XXX<T> 类中使用泛型类型参数 T 来表示 Data 属性的类型。在控制器的操作方法中,我们根据 OptType 的值使用 switch 语句将 Data 字段转换为正确的类型。在这个示例中,我们使用了 Newtonsoft.Json 库中的 JObject 类来临时解析 JSON 数据,并将其转换为 MyData 类型。

请注意,上述示例仅提供了一个基本框架,您可以根据实际需求来扩展和优化数据类型转换的逻辑。确保您的数据类型具有正确的属性和字段,以便进行正确的反序列化。

收获园豆:3
Technologyforgood | 大侠五级 |园豆:5718 | 2023-09-16 16:11

已自行搞定

雪山浪子 | 园豆:37 (初学一级) | 2023-09-16 16:12
其他回答(2)
0

可以试试 dynamic, JObject

复制粘贴机器人 | 园豆:702 (小虾三级) | 2023-09-15 15:53
0

前端 "data" : "Json字符串"
后端 public string Data{get;set;}
然后做反序列化,根据你的optType决定转成哪个对象

收获园豆:2
顾星河 | 园豆:7173 (大侠五级) | 2023-09-15 21:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册