【发布时间】:2019-11-22 05:55:31
【问题描述】:
我有一个场景,其中我有(A 类)的(objA)和(B 类)的(objB)。 A 类和 B 类中的成员变量不匹配。 我需要将数据从 objA 分配给 objB。 我四处搜索并找到了与将 objA 映射到成员变量相同的 objB 相关的解决方案。但是当A类和B类的成员不同时,我没有发现任何东西。
以下是 2 个示例类(A 类和 B 类),供您参考。
public class Class A
{
private ABCHeaderType ABCHeaderField;
private string title;
private string date;
private string id;
private string location;
private string status;
private string hashNumber;
.....skipped getter setters
}
public class ABCHeaderType {
private string version;
private string outputTypeField;
private int langCd;
private string dateTime;
private string hashField;
.....skipped getter setters
}
public class Class B
{
public Input input { get; set; }
}
public class Input
{
public Output output{ get; set; }
}
public class Output
{
public string Title { get; set; }
public string Date { get; set; }
public string id { get; set; }
public string location { get; set; }
public string Status { get; set; }
public string laterDate { get; set; }
public string hashNumber { get; set; }
public Info info { get; set; }
}
public class Info
{
public string name { get; set; }
public string ht { get; set; }
public string type { get; set; }
public string res { get; set; }
public string wd { get; set; }
public string ornt { get; set; }
}
现在我正在使用转换器类将 objA 复制到 objB 中,并使用下面的代码 sn-p 进行复制
objB.input.output.Title = objA.Title;
objB.input.output.Date = objA.Date;
objB.input.output.id = objA.id;
objB.input.output.location = objA.location;
objB.input.output.Status = objA.Status;
objB.input.output.hashNumber = objA.hashNumber;
objB.input.output.inf.type = objA.ABCHeaderField.outputTypeField
谢谢...
【问题讨论】:
-
如果两个类的属性名称相同,那么就有机会这样做!在这个的帮助下:stackoverflow.com/a/4144817/7124761 否则我认为这是不可能的!
-
看看 automapper。 automapper 是一个为此目的而设计的库。
-
如果它们的成员不同,这两个类有什么关系?也许它们有一个共同的祖先,或者某些属性可以编码成一个共同的接口? |如果您当前的代码有效,您应该继续使用它。我能想到的唯一其他方法是使用反射。反射是一个很好的后备方案 - 但绝不应该用作有效/主要的解决方案。如果您(还)没有像您展示的那样的转换器代码,则使用反射。
-
@Christopher,这两个类以某种方式相关 - 考虑 objA 是来自一个系统的传入对象,而 objB 是发送到另一个不同系统的对象。但是 objB 需要来自 objA 的数据
标签: c#