P39 数据塑形
只返回需要的字段。字段指的是dto上面的字段。你不是entity上的字段。P39 数据塑形

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

扩展方法

还是使用一个扩展方法。
P39 数据塑形
判断非空,new一个List的ExpandObject
P39 数据塑形
如果大小固定的话,可以把大小也写上。
P39 数据塑形
那么怎么通过字段名返回响应的属性值呢?这个时候就肯定需要用到反射。而反射呢,比较消耗资源。

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

然后就是加上这些属性
P39 数据塑形

单独处理

属性都是逗号分隔开的
通过反射取出propertyInfo。用typeof().GetProperty首先参数是属性的名称,然后是 忽略大小写。
P39 数据塑形
然后必须是public的,然后必须是实例上面的
P39 数据塑形
有了数据之后就循环数据
P39 数据塑形
ExpandObject实际上就是一个Dictionary。下面这样就可以把属性名和属性值添加到ExpandObject里面了。
P39 数据塑形
添加到list里面,然后返回这个list
P39 数据塑形

controller里面处理

首先加一个字段属性
P39 数据塑形
这是我们目前的返回类型。
P39 数据塑形
这里换成IActionResult
P39 数据塑形
最后用shapeData
P39 数据塑形
然后还需要考虑到分页
P39 数据塑形

测试

先只取一个id
P39 数据塑形
加上companyName
P39 数据塑形

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

P39 数据塑形
分开两个扩展方法是处于性能的考虑

P39 数据塑形

测试

P39 数据塑形

没有的属性

这是客户端引起的错误,应该由返回4开头的错误。
P39 数据塑形

再封装一个service

P39 数据塑形
想要导出复用它就把它封装成一个接口,注入到DI容器。
P39 数据塑形

startUp注册

P39 数据塑形

构造函数注入

P39 数据塑形
判断字段是否存在
P39 数据塑形

获取单个资源的action

P39 数据塑形

测试不存在的字段。

P39 数据塑形

其他功能


P39 数据塑形

包含子资源的把子资源也一块取出来
P39 数据塑形

只取子资源的id
P39 数据塑形
这个字段companyName包含 dave这个字符串的。
P39 数据塑形

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

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

结束

 

相关文章:

  • 2021-06-06
  • 2022-12-23
  • 2021-05-31
  • 2021-11-21
  • 2021-06-23
  • 2021-11-17
  • 2021-08-04
  • 2021-10-24
猜你喜欢
  • 2021-05-28
  • 2022-12-23
  • 2021-11-27
  • 2021-10-31
  • 2022-01-04
  • 2022-12-23
  • 2021-07-18
相关资源
相似解决方案