2017-01-24 2 views
2

У меня есть класс с набором свойств для например .:Карта двух различных объектов с разными свойствами

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); 
} 

Есть ли более простой способ сделать это с помощью некоторого механизма отображения?

Хотя я привел более простой пример, реальный сценарий намного сложнее с под-объектами и обладает большим количеством свойств.

+0

Создать конструктор Employee и передать объект ThirdPartyEmployee как этот 'государственный служащий (ThirdPartyEmployee tpeObj) {/ * Присвоить в этом конструктору * /}' – GSP

+0

вы можете посмотреть automapper, [руководство по началу работы с автоматом] (https://github.com/AutoMapper/AutoMapper/wiki/Getting-started) –

+0

Я думаю, вы должны добавить тег json.net. Здесь литье выполняется с помощью json-преобразователя. поэтому я думаю, что это должно принадлежать тегу – Eldho

ответ

3

Посмотрите на AutoMapper мой друг, это то, что вы ищете http://automapper.org/

Здесь у вас есть старый вопрос, который может помочь вам

How to handle custom Properties in AutoMapper

+0

Automapper поражает. :-) – Adam

+0

@mrvoid - Спасибо. Дай взглянуть . Я был в предположении, что automapper нуждается в тех же именах свойств. –

+0

nope, вы можете создавать пользовательские сопоставления :) удачи! – MrVoid

1

Если вы используете NewtonSoft вы можете попробовать используя JsonPropertyAttribute

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

} 

Th это будет отображать JSon свойство Id в EmpId

Similar question

+0

спасибо @Eldho .. Quick вопрос. Могу ли я сделать это для многоуровневых? например, если я хочу сопоставить [JsonProperty («Id.Val»)] с EmpId? –

+0

Я думаю, вместо того, чтобы делать несколько уровней, поместите объект в модель ур и попытайтесь отобразить внутри свойства. – Eldho

Смежные вопросы