首页 > 其他 > 详细

P39 数据塑形

时间:2020-12-14 14:32:19      阅读:23      评论:0      收藏:0      [点我收藏+]


技术分享图片
只返回需要的字段。字段指的是dto上面的字段。你不是entity上的字段。技术分享图片

写代码

这里的返回类型实际上是 IEnumerable<T>类型的。这样就会把ComapnyDto上面的字段都返回回去。想要做数据塑性,就不能返回具体的类型。因为具体的类型字段都是死的。我们应该返回什么呢 ExpandObject类型的 ExpandObject里面的属性是动态的。技术分享图片

扩展方法

还是使用一个扩展方法。
技术分享图片


技术分享图片
判断非空,new一个List的ExpandObject
技术分享图片
如果大小固定的话,可以把大小也写上。
技术分享图片
那么怎么通过字段名返回响应的属性值呢?这个时候就肯定需要用到反射。而反射呢,比较消耗资源。

首先争对这个类型,把它所有的属性都提取出来。然后重复利用这个结果就可以了。 而不必循环的时候针对每个实例再走一遍这个反射操作。
 
如果传入的fields为空,就表示返回所有的属性
技术分享图片
那么getProperties获取什么类型的属性呢?首先是public的,另外还是实例的instance
技术分享图片

然后就是加上这些属性
技术分享图片

单独处理

属性都是逗号分隔开的
通过反射取出propertyInfo。用typeof().GetProperty首先参数是属性的名称,然后是 忽略大小写。
技术分享图片
然后必须是public的,然后必须是实例上面的
技术分享图片

技术分享图片

技术分享图片
有了数据之后就循环数据
技术分享图片
ExpandObject实际上就是一个Dictionary。下面这样就可以把属性名和属性值添加到ExpandObject里面了。
技术分享图片
添加到list里面,然后返回这个list
技术分享图片

controller里面处理

首先加一个字段属性
技术分享图片
这是我们目前的返回类型。
技术分享图片
这里换成IActionResult
技术分享图片
最后用shapeData
技术分享图片
然后还需要考虑到分页
技术分享图片

测试

先只取一个id
技术分享图片
加上companyName
技术分享图片

获取单个资源的情况-数据塑形

技术分享图片

技术分享图片


技术分享图片

技术分享图片


技术分享图片
分开两个扩展方法是处于性能的考虑

技术分享图片

测试

技术分享图片

技术分享图片

没有的属性

这是客户端引起的错误,应该由返回4开头的错误。
技术分享图片

再封装一个service

技术分享图片
想要导出复用它就把它封装成一个接口,注入到DI容器。
技术分享图片

技术分享图片

技术分享图片

startUp注册

技术分享图片

构造函数注入

技术分享图片
判断字段是否存在
技术分享图片

获取单个资源的action

技术分享图片

测试不存在的字段。

技术分享图片

其他功能


技术分享图片

包含子资源的把子资源也一块取出来
技术分享图片

只取子资源的id
技术分享图片
这个字段companyName包含 dave这个字符串的。
技术分享图片

可以参考的微软的OData,它是完全实现restful风格架构的基础以上又添加了很多高级的功能,包裹高级的查询,数据塑性等等。

以上讲的是完全自己手动实现的数据塑性。如果项目想使用一个现成的完全使用restful架构风格的api,就可以使用微软的OData相关的一些框架。
 

结束

 

P39 数据塑形

原文:https://www.cnblogs.com/wangjunwei/p/14132645.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!