2017-01-24 8 views
2

Ich habe eine Klasse mit einem Satz von Eigenschaften für z.B .:Karte zwei verschiedene Objekte mit unterschiedlichen Eigenschaften

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

Ich habe ein anderes Objekt - ich die Daten von einem Dritten als API String erhalten. Ich benutzte NewtonSoft Json, um sie zu deserialisieren. Ihre Struktur sieht ungefähr so ​​aus:

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

Aus Gründen der Einfachheit - ich kann die Eigenschaft der beiden Klassen nicht ändern.

Nun ist die Frage, wenn ich das JSON-Objekt erhalten,

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

Jetzt brauche ich obj2 als obj1 zu werfen.

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

Gibt es einen einfacheren Weg, dies zu tun mit einigem Mapping-Mechanismus: Während ich kann sagen, manuell tun?

Während ich ein einfacheres Beispiel gegeben habe, ist das tatsächliche Szenario mit Unterobjekten und viel mehr Eigenschaften viel komplizierter.

+0

einen Konstruktor der Mitarbeiter erstellen und ein Objekt von ThirdPartyEmployee wie dieser 'öffentliche Angestellter (ThirdPartyEmployee tpeObj) übergeben {/ * Assign in diesem Konstruktor * /}' wird Karte – GSP

+0

können Sie einen Blick auf Autoadapter, [Autoadapter Starter Guide] (https://github.com/AutoMapper/AutoMapper/wiki/Getting-Started) –

+0

Ich denke, Sie sollten das Tag json.net hinzufügen. Hier wird durch json converter gegossen. also ich denke es sollte zum tag – Eldho

Antwort

3

Werfen Sie einen Blick mein Freund AutoMapper, ist das, was Sie suchen http://automapper.org/

Hier haben Sie eine alte Frage, die Sie

helfen kann How to handle custom Properties in AutoMapper

+0

Automapper gehören ist erstaunlich. :-) – Adam

+0

@mrvoid - Danke. Lass mich mal sehen . Ich war unter der Annahme, dass Auto-Mapper dieselben Eigenschaftennamen benötigt. –

+0

Nein, Sie können benutzerdefinierte Zuordnungen erstellen :) Viel Glück! – MrVoid

1

Wenn Sie NewtonSoft verwenden, können Sie versuchen, mit JsonPropertyAttribute

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

} 

Th ist json Eigentum von Id zu EmpId

Similar question

+0

danke @Eldho .. Schnelle Frage. Kann ich das für Multilevel tun? wie für zB: wenn ich [JsonProperty ("Id.Val")] zu EmpId zuordnen möchte? –

+0

Ich denke, anstatt eine Multi-Level zu tun, platzieren Sie das Objekt in Ihrem Modell und versuchen Sie, innerhalb der Eigenschaft zu mappen. – Eldho

Verwandte Themen