栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

C# .Net6 Patch请求 System.Text.Json JsonPatchDocument解析失败 Post局部更新替换方法分享

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C# .Net6 Patch请求 System.Text.Json JsonPatchDocument解析失败 Post局部更新替换方法分享

 因为我们的项目中需要对某一部分数据进行局部更新,所以第一时间考虑到了 HttpPatch请求~

这时候问题就来了,因为我们项目中对JSON数据的解析使用的是.net自带的System.Text.Json类库。但是恰好接收Patch请求参数的 JsonPatchDocument 。它竟然不支持。。。

解析还是需要引入Newtonsoft.Json。

我目前项目框架中使用了System.Text.Json 进行了格式化设置,当我在Program中配置AddNewtonsoftJson()后就会如官方文档所说

 意思就是我之前的格式化就不好使了。。。

接着不急,官方给出了解决方案

 嗯。。。。先这样,再那样。

我看着示例放了进去,不好使(因为官方示例只是展示了这个模块的用法,项目中肯定会有其他的设置,不知道是项目当中哪个地方的设置起了冲突,有大牛成功的话可以指导一下~)

划重点~~~

还是一如既往,我自己搞个实现吧。用的是Post请求

先放一个Helper吧~

public static class MapHelper
	{

		/// 
		/// 部分更新,只替换需要更新的部分
		/// 
		/// 新数据
		/// 旧数据载体
		/// 前端传输的动态json数据(缩小匹配范围)
		/// 新数据
		/// 旧数据载体(新数据将进行局部更新)
		/// 
		public static TTarget Replace(string json,TSource source, TTarget target)
		{
			var sourcePros = source.GetType().GetProperties();
			var targetPros = target.GetType().GetProperties();

			//拿到需要更新数据的属性
			var change = (from s in sourcePros.AsEnumerable()
						  join t in targetPros.AsEnumerable()
						  on s.Name equals t.Name
						  where s.GetValue(source) != t.GetValue(target) && json.Contains($""{s.Name}"")
						  select s).ToList();

			foreach (var s in change)
			{
				var tP= targetPros.FirstOrDefault(f=>f.Name==s.Name);
				if(tP != null)
				{
					tP.SetValue(target,s.GetValue(source));
				}
			}
			return target;
		}
	}

 再贴一个用法

 前端传进参数,进行反序列化,查出旧数据,json变量是为了缩小匹配更新的范围,传什么更新什么。

这里用到了反射~~

有问题私信我,如有更好的方法,请大家多多指正~~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/996886.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号