Erstellen dynamischer Objekte

7

Wie man Objekte dynamisch erzeugt?

%Vor%

Imaginary Class (Klasse ist im Code nicht verfügbar):

%Vor%

Hinweis: Eigenschaften- / Spaltennamen sind dynamisch.

Nun möchte ich List<Dictionary<string, object>> in eine Klasse vom Typ List<object> (d. h.) List<Employee> konvertieren.

Ist es möglich? Vorschläge bitte.

    
Ramesh Durai 14.09.2012, 15:11
quelle

3 Antworten

20

Verwenden eines anonymen Objekts (wenn Sie die Eigenschaften kennen, die Sie projizieren möchten):

%Vor%

Oder verwenden Sie System.Dynamic.Expando (wenn Sie unbekannte Spaltennamen dynamisch projizieren müssen):

%Vor%     
Tetsujin no Oni 14.09.2012, 15:15
quelle
2

Bearbeitet um "Emit" zu empfehlen.

Angesichts der Tatsache, dass Sie nicht einmal die Spaltennamen kennen, würde ich Reflection.Emit verwenden, um zuerst die Mitarbeiterklasse im laufenden Betrieb zu erstellen. Informationen zur Verwendung von Emit finden Sie Ссылка . Der Pseudocode ist dann:

%Vor%

Der echte Code wird etwas komplizierter sein, da Emit nicht einfach ist. :)

    
Tombala 14.09.2012 15:15
quelle
1

Ja, das ist möglich, aber nicht ganz einfach.

Sie können Typen dynamisch definieren, z. über CodeDOM oder mit Reflection.Emit . Im Allgemeinen generiert Ihre Anwendung Codemodell (CodeDOM) oder IL-Anweisungen (Reflection.Emit), um einen neuen Typ zu erstellen. Je nach Ihren Bedürfnissen können Sie sogar die generierten DLLs speichern und später verwenden.

Dies ist zum Beispiel, wie Serializer-Assemblies in .NET generiert werden: Der Typ, der serialisiert werden soll, wird inspiziert, und benutzerdefinierte Serializer-Klassen werden speziell für diesen Typ generiert, so dass die Serialisierung nicht auf einer Spiegelung angewiesen ist Laufzeit.

    
Zdeslav Vojkovic 14.09.2012 15:35
quelle

Tags und Links