.net Core webapi 接收post复杂实体

qq_37583925 2017-12-27 04:41:41
post数据格式如下:

圈出来的event_content的格式未知,要根据type来解析的。但是我后端设置event_content对应不管是string/object/dynamic都是null。请问一下event_content该设置为什么格式?传送端应该是正确的,因为是别人提供的API。
诚信求教大佬,QAQ
...全文
2382 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_37583925 2018-01-03
  • 打赏
  • 举报
回复
后来看了一下,因为没法看到发送方的源码。但是需要加上[FromBody]才可以,这方面我还要再去看看。但是项目上面暂时没问题了
我是三峡移民 2017-12-29
  • 打赏
  • 举报
回复
你多跑几次就完事了啊
  • 打赏
  • 举报
回复
反射加载命令处理对象 --> 获取反射加载命令处理对象类型
  • 打赏
  • 举报
回复
上面的例子里的 object 写的不对,应该是你定义的接口。 大致举个例子,代码应该是
    JObject obj = JObject.Parse(jsonStr);
    Type type = 反射加载命令处理对象((int)obj["type"]);
    var cmd = (IMyCommand)Activator.CreateInstance(type);
    var evt = cmd.ParseContent((JObject)obj["event_content"]);
这里,通过 jsonStr,来获得 type,然后获得 cmd,并且知道所有的实现了 IMyCommand 接口的对象都实现 ParseContent 函数功能,返回一个具有 IMyEventContent 接口的数据对象。于是反射出来命令处理对象 cmd,调用其 ParseContent 功能。 而不同的命令处理对象,其 ParseContent 函数内部返回的具体的对象的类型是不同的。但是你要按照业务接口来设计开发。
  • 打赏
  • 举报
回复
引用 楼主 qq_37583925 的回复:
post数据格式如下: 圈出来的event_content的格式未知,要根据type来解析的。但是我后端设置event_content对应不管是string/object/dynamic都是null。请问一下event_content该设置为什么格式?传送端应该是正确的,因为是别人提供的API。 诚信求教大佬,QAQ
假设使用 Newtonsoft.Json 首先,你可以解析为 JObject。然后当你确定 event_content 目标类型的时,例如调用一个 ATM 处理类,那么这个类就可以写
override
 object ParseContent(JObject obj)
{
    return obj.ToObject<ATM>();
} 
并且你的解析程序的多态代码可以写为
(IMyEventContent)command.ParseContent((JObject)obj["event_content"]);
编程设计要按照接口来理解和执行。如果你设计软件时根本不知道 IMyEventContent 的业务含义,那么你根本无需解析 json 中的 event_content 这个 token。如果你知道接口的业务含义,但是你需要根据 type 为 1 时反射获取命令处理类型,那么这就一定是多态调用 ParseContent 并且返回 IMyEventContent 的设计模式了。
  • 打赏
  • 举报
回复
你这个实际肯定是有对应业务逻辑的,你应该按照type不同建立对应的反序列化实体 然后如果业务中可以确定来源是什么,那就直接用对应的类型去反序列化,否则按type取对应的反序列化,但还是不好写,存在硬编码问题 如果不确定,那就正则获取type对应的字段
丰云 2017-12-28
  • 打赏
  • 举报
回复
我能想到的方法,就是写一个切面程序,替代mvc的参数格式化方法,在这个方法里,对这种情况单独做判断处理
丰云 2017-12-28
  • 打赏
  • 举报
回复
你这种不确定的动态结构,没法对象接收,这点是可以肯定的!! 所以不用在这个方面花心思了
mirrorspace 2017-12-27
  • 打赏
  • 举报
回复
那就用最原始的办法 不用方法参数,直接获取HTTP原始数据.然后再分析
xuezt 2017-12-27
  • 打赏
  • 举报
回复
定义成object看看是收到什么数据
  • 打赏
  • 举报
回复
dynamic是要整个json对象都反序列化为dynamic,而不是其内某个字段反序列化为dynamic
qq_37583925 2017-12-27
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
.net core还没用过。 不过我觉得你应该贴出你的代码。 我个人认为dynamic应该是没问题的才对。
我也认为dynamic应该没问题,但是就是不行。。
qq_37583925 2017-12-27
  • 打赏
  • 举报
回复
引用 2 楼 mirror030 的回复:
如果event_content内的属性是固定的. 造个这样的类然后 event_content=这个类 就能得到参数了 如果传来的JSON是复杂的,那么应该传一个字符串过来.而不是表单参数. 因为后台拿到JSON字符串后,可以解析成字典或者动态类型.多复杂的都能搞定
对接文档上说传过来的是JSON格式的,event_content不固定,有40多种情况。
thiefx 2017-12-27
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
.net core还没用过。 不过我觉得你应该贴出你的代码。 我个人认为dynamic应该是没问题的才对。
一劳永逸。。。
qq_37583925 2017-12-27
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
dictionary,看其value格式是固定的

event_content是不固定的,我贴的只是一种情况,有可能是
这种
正怒月神 版主 2017-12-27
  • 打赏
  • 举报
回复
.net core还没用过。 不过我觉得你应该贴出你的代码。 我个人认为dynamic应该是没问题的才对。
mirrorspace 2017-12-27
  • 打赏
  • 举报
回复
如果event_content内的属性是固定的. 造个这样的类然后 event_content=这个类 就能得到参数了 如果传来的JSON是复杂的,那么应该传一个字符串过来.而不是表单参数. 因为后台拿到JSON字符串后,可以解析成字典或者动态类型.多复杂的都能搞定
  • 打赏
  • 举报
回复
dictionary,看其value格式是固定的

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧