[c#]实现同一个类的两个对象融合为一个对象

本文介绍了如何使用C#将两个相同类型的对象A和B融合成一个新的对象C。当A的字段有值时,字段值赋给C,否则取B的字段值。最初尝试使用反射实现,但遇到复杂逻辑问题,尤其是处理泛型。最终通过序列化为Json并使用JToken解决了问题,简化了实现。代码中引用了Newtonsoft.Json.Linq库,作者欢迎改进建议。
摘要由CSDN通过智能技术生成

需求是,同一类型的两个对象A,B, 合并为C, 要求:A所有字段及其嵌套字段有值的话,将来自A的值赋给C,若没有值的话,将来自B的值赋给C。一开始我想使用反射遍历所有子字段成员去完成这个工作,但是实际尝试之后发现其中逻辑分支比较多,尤其是对泛型的处理,导致很复杂而不好实现。后来调整思路,对对象的所有字段操作还是序列化后的Json比较方便,于是使用JToken去完成了这个工作。自己觉得这种思路是应该记录下来的,因而发布本。代码如下,(个人水平不高,欢迎提出改进意见)

【需要引用Newtonsoft.Json.Linq】

private T MixObjects<T>(T object1, T object2)
{
	var JToken1 = JToken.FromObject(object1);	
	var JToken2 = JToken.FromObject(object2);	
	RecursivelyChangeJtokenSubPropertiesValue(JToken1, JToken2);
	return JToken2.ToObject<T>();
}

private void RecursivelyChangeJtokenSubPropertiesValue(JToken src, JToken dts)
{
	if (src.Type == JTokenType.Array)
	{
		if (dts.SelectToken(src.Path) as JArray == null)	
			dts.SelectToken(src.Path).Replace(src);	
		else foreach (var item in src as JArray)
		{
			if (item.Children().Count() == 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值