Laden...

[gelöst] Klassen / Strukturen dynamisch erstellen

Erstellt von crystal vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.797 Views
C
crystal Themenstarter:in
2 Beiträge seit 2012
vor 12 Jahren
[gelöst] Klassen / Strukturen dynamisch erstellen

Hallo Forum!

Ich habe ein Problem, dass sich leider nicht ganz einfach lösen lässt und hoffe auf eure Hilfe.

Über das Netzwerk bekomme ich ein Byte Array in mein Programm von außen gesendet. Es enthält verschiedene primitive Datentypen - Elemente einer Struktur.

Das Programm kennt die Strukturdefinition nicht - sie ist immer unterschiedlich definiert. Darüber hinaus bekomme ich eine Textdatei mit der Definition der Struktur, die ich parsen kann, um an die einzelne Elemente der Struktur heran zu kommen.

Was ich also vor habe: Textdatei parsen -> Struktur/Klasse dynamisch erstellen -> Byte[] zerlegen und Werte den Strukturelementen/Klassenobjekten zuweisen.

Das ganze lässt sich ganz bestimmt mit CodeDOM umsetzen, doch vielleicht gibt es einen einfacheren Weg?

Danke für eure Zeit und Antworten!

T
381 Beiträge seit 2009
vor 12 Jahren

Du hast für deine Definitionen zwei Möglichkeiten:
(1) Zur Laufzeit Interpretieren oder (2) in C# Code umwandeln. Mir fallen grad nicht mehr ein.

(1) Du kannst dir die Struktur der erwarteten Daten anlegen und dem Message Reader zur Verfügung stellen. Die Definition dient dann quasi als Konfiguration für den Parser der die Daten strukturiert ablegt. Die geparsten Daten können z.B. in Dynamics abgelegt werden. Dies kostet allerdings etwas Typsicherheit.

(2) Ist im Prinzip dein Vorschlag. Du kannst per CodeDOM Code erzeugen, Compilieren, Einbinden und per Reflection drauf zugreifen. Hier bist du Typsicher.

Was nun mehr Arbeit macht ist die Frage. Ich denke ich würde einen unabhängigen Codegenerator für (2) bauen und die Klassen dann statisch einbinden und im Programm nutzen.

(3) Du kannst natürlich die gegebenen Definitionen auch per Hand in Code übersetzten.

Schau dir mal WCF an, die definieren auch Protokolle und erzeugen auf Basis der Metainformationen die Datenstrukturen - in dem Fall Interfaces.

Gruß.

W
872 Beiträge seit 2005
vor 12 Jahren

Schau Dir auch Dynamic Object an.
Ich denke, die Hauptfrage ist mehr, wie Deine erzeugten Objekte benutzt werden sollen und wie stark es auf Performance ankommt.
Ansonsten wäre je nach Vorgehen denkbar, daß Du mit T4 arbeitest, um Klassen zu erzeugen...

F
10.010 Beiträge seit 2004
vor 12 Jahren

Nur als Frage, wozu brauchst du dann die Structs?
Du müsstest dann ja auch die Software dazu ebenfalls generieren.

Wäre es nicht sinnvoller das in Dictionary oder bei geschachtelten Strukturen auch als XML abzulegen?
Hätte einige vorteile.

C
crystal Themenstarter:in
2 Beiträge seit 2012
vor 12 Jahren

Vielen Dank an alle für hilfreiche Infos!

Manchmal übersieht man die einfachsten Sachen - ein Dictionary passt tatsächlich am besten! (Ich habe keine geschachtelten Strukturen)

[GELÖST]