C# .Net在null时递归合并两个相同的对象、所有属性
我有一个任务,其中提供了一个基本对象,其中包含来自我们的数据服务的对象和原语,并将其与客户机提供的相同对象上提供的数据相耦合。它需要最终成为一个完整的对象。我将对象称为“MyObject” 以下是数据服务中对象的外观:C# .Net在null时递归合并两个相同的对象、所有属性,c#,.net,object,merge,C#,.net,Object,Merge,我有一个任务,其中提供了一个基本对象,其中包含来自我们的数据服务的对象和原语,并将其与客户机提供的相同对象上提供的数据相耦合。它需要最终成为一个完整的对象。我将对象称为“MyObject” 以下是数据服务中对象的外观: MyObject.FirstName = null MyObject.LastName = null MyObject.DataProperty1 = anotherobject anotherobject.property1 = somevalue1 another
MyObject.FirstName = null
MyObject.LastName = null
MyObject.DataProperty1 = anotherobject
anotherobject.property1 = somevalue1
anotherobject.property2 = somevalue2
anotherobject.property2 = somevalue2
MyObject.DataProperty2 = yetanotherobject
yetanotherobject.property1 = someothervalue1
yetanotherobject.property2 = someothervalue2
yetanotherobject.property3 = someothervalue3
yetanotherobject.property4 = someothervalue4
下面是由客户端提供的对象的外观
MyObject.FirstName = John
MyObject.LastName = Doe
MyObject.DataProperty1 = anotherobject
anotherobject.property1 = null
anotherobject.property2 = null
anotherobject.property2 = null
MyObject.DataProperty2 = yetanotherobject
yetanotherobject.property1 = null
yetanotherobject.property2 = null
yetanotherobject.property3 = null
yetanotherobject.property4 = null
我不能期望确切地知道哪些子项对象将为null,但我知道递归地,我需要最终合并的对象包含来自两个原始对象的实际数据,而不是null。显然,这些对象将比我上面键入的要复杂得多,但要点是我的问题是有效的
我试过做一些事情,比如我不能理解非原语
我真的不认为这是AutoMapper的任务,因为MyObject的类型对于客户端和数据端都是相同的类。把它映射到自身是没有意义的
可惜我不能就这样走了
MyObject1+MyObject2=新组合对象哈哈
此外,这是遗留代码,我意识到它根本不是“最佳实践”。但是仍然需要解决这个问题。我可以看到,您将遇到两个潜在的显示阻止问题:嵌套对象引用和引用其父对象的子对象。两者都可能导致无限递归场景和内存不足错误 您可以通过简单地决定不合并任何深度超过(比如)x层的嵌套来缓解嵌套问题。这并不理想,但它可以防止该场景的无限递归 儿童指代父母的问题更为复杂。您必须能够将合并的对象映射到其原始对象,然后在输出中将引用节点映射回已合并的节点。这不是胆小鬼的任务 这是AutoMapper无法为您完成的任务吗?如果是的话,我的直觉告诉我,它会比你重新发明它更好地为你做到这一点,并且大大降低了出错的风险