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!
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ß.
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...
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.
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]