映射具有不同属性的两个不同对象

时间:2017-01-24 03:33:26

标签: c# .net casting

我有一个具有一组属性的类,例如:

class Employee 
{
    string Id {get ; set ; }
    string Name {get ; set ; }
    string Lastname {get ; set ; }
    string email {get ; set ; }
}

我有另一个对象 - 我从第三方获取数据作为API字符串。我使用NewtonSoft Json对它们进行反序列化。他们的结构看起来像这样:

class ThirdPartyEmployee
{
    string EmpId {get ; set ; }
    string fName {get ; set ; }
    string LName {get ; set ; }
    string emailID {get ; set ; }
    string Phonenumber {get ; set ; }
}

为简单起见 - 我无法更改两个类的属性。

现在的问题是,当我收到json对象时,

List<Employee> obj1 = new List<Employee>();
List<ThirdPartyEmployee> obj2 = JsonConvert.DeserializeObject<List<ThirdPartyEmployee>>(JsonConvert.SerializeObject(responseString));

现在我需要将obj2转换为obj1。虽然我可以通过说:

手动完成
foreach (var currObj2 in obj2) 
{
    Employee  employee = null ; 

    employee .Id = currObj2 .EmpId; 
    employee.Name = currObj2.fName;
    employee.Lastname = currObj2.LName;
    employee.email = currObj2.emailID;
    obj1.add(employee); 
}

使用某种映射机制有更简单的方法吗?

虽然我给出了一个更简单的例子,但实际场景对于子对象和更多属性来说要复杂得多。

2 个答案:

答案 0 :(得分:3)

看看我的朋友AutoMapper,你正在寻找http://automapper.org/

这里有一个可以帮助你的旧问题

How to handle custom Properties in AutoMapper

答案 1 :(得分:2)

如果您使用的是NewtonSoft,可以尝试使用JsonPropertyAttribute

class ThirdPartyEmployee
{
  [JsonProperty("Id")]
  string EmpId {get ; set ; }

}
  

这会将Id的json属性映射到EmpId

Similar question