Entwickler-Ecke
C# - Die Sprache - Strukturen dynamisch zur Laufzeit erzeugen
crystal - Do 16.02.12 12:07
Titel: Strukturen dynamisch zur Laufzeit erzeugen
Hallo C# Forum!
Ich bin neu hier, bitte korrigiert mich, falls ich was falsch mache ;)
Ich habe ein Problem, dass sich leider ganz einfach nicht lösen lässt und hoffe auf eure Hilfe: Über das Netzwerk bekomme ich ein Byte[] in mein Programm von außen geschickt. Dieses Byte[] enthält Elemente einer Struktur, die ich nun zusammenbauen soll.
Das Programm kennt die Struktur nicht - diese ist immer unterschiedlich zusammengebaut. Ich bekomme jedoch eine Textdatei, die ich parsen kann, um an die einzelne Elemente der Struktur heran zu kommen.
z.B.:
C#-Quelltext
1:
| public struct myStruct { public bool active; public string caption; public Int16 value1; public Int16 value2;} |
Vorhaben zusammengefasst: Textdatei parsen -> Struktur dynamisch erstellen -> Byte[] zerlegen und Werte den Strukturelementen zuweisen.
Das ganze lässt sich ganz bestimmt mit CodeDOM umsetzen, doch vielleicht gibt es einen schnelleren Weg?
Danke für eure Vorschläge!
Moderiert von
Th69: C#-Tags hinzugefügt
Crosspost:
Klassen / Strukturen dynamisch erstellen [
http://www.mycsharp.de/wbb2/thread.php?goto=lastpost&threadid=101684]
Kha - Do 16.02.12 13:40
:welcome: in der EE!
Der Plan hört sich schon einmal nicht schlecht an, los geht's ;) ! Eine Information fehlt aber noch: wie/womit wurde die Struktur überhaupt als Byte-Array serialisiert? Da gibt es schon so einige Möglichkeiten.
crystal - Do 16.02.12 14:26
Vielen Dank für die Antworten und hilfreiche Hinweise!
Th69 hat folgendes geschrieben : |
bitte Crossposts entsprechend unserer Richtlinien (4.8) angeben |
-> Korrigiert
Kha hat folgendes geschrieben : |
Eine Information fehlt aber noch: wie/womit wurde die Struktur überhaupt als Byte-Array serialisiert? Da gibt es schon so einige Möglichkeiten. |
Herkunft des Byte Arrays ist eher irrelevant. Es liegt im BigEndian Format vor und kann mit dem BitConverter
(Gewusst wie: Konvertieren eines Bytearrays) [
http://msdn.microsoft.com/de-de/library/bb384066.aspx] konvertiert werden.
Spannend ist, ob es außer CodeDOM Möglichkeiten gibt so was zu realisieren...
Ralf Jansen - Do 16.02.12 14:35
Zitat: |
Herkunft des Byte Arrays ist eher irrelevant. Es liegt im BigEndian Format vor und kann mit dem BitConverter (Gewusst wie: Konvertieren eines Bytearrays) konvertiert werden. |
Die strings ebenfalls?? Da gibt es ja reichlich Darstellungsvarianten und Encodings.
Dein Vorhaben klingt ein wenig nach Rad neu erfinden. Wenn deine Strukturbeschreibung in dieser Form noch nicht fixiert wird würde ich mich in der Wsdl Ecke mal umsehen. Da gibt es einige Lösungen dynamisch aus der Typbeschreibung ProxyKlassen/Assemblies zu erzeugen. Nur weil es Wsdl heißt muß da ja nicht zwingend ein echter Webservice dahinter hängen. Wenn man sich dann noch nach Soap richtet ist auch ein eventuell vorhandenes Formatproblem des Bytestreams gelöst.
crystal - Do 16.02.12 15:28
Ralf Jansen hat folgendes geschrieben : |
Zitat: | Herkunft des Byte Arrays ist eher irrelevant. Es liegt im BigEndian Format vor und kann mit dem BitConverter (Gewusst wie: Konvertieren eines Bytearrays) konvertiert werden. |
Die strings ebenfalls?? Da gibt es ja reichlich Darstellungsvarianten und Encodings.
Dein Vorhaben klingt ein wenig nach Rad neu erfinden. Wenn deine Strukturbeschreibung in dieser Form noch nicht fixiert wird würde ich mich in der Wsdl Ecke mal umsehen. Da gibt es einige Lösungen dynamisch aus der Typbeschreibung ProxyKlassen/Assemblies zu erzeugen. Nur weil es Wsdl heißt muß da ja nicht zwingend ein echter Webservice dahinter hängen. Wenn man sich dann noch nach Soap richtet ist auch ein eventuell vorhandenes Formatproblem des Bytestreams gelöst. |
Ralf, danke für den Hinweis.
Ich muss wahrscheinlich die Frage ein bisschen verdeutlichen:
Ich weiss, dass im Byte Array nur 8-Bit ASCII Zeichen auftauchen können: 1 Byte = 1 Zeichen. Deswegen ist BitConverter für mich mehr als genug.
Textdatei parsen und Byte Array zerlegen stellt kein Problem dar.
Interessant ist, wie man eine Struktur / Klasse zur Laufzeit anlegen kann, oder sollte ich ganz anders vorgehen? (was ich inzwischen glaube)
Kha - Do 16.02.12 17:30
Wie im anderen Forum schon geschrieben wurde: Das hängt ganz davon ab, was du mit dem Struct danach vor hast. Ein Dictionary wäre sicher die einfachste Lösung.
crystal - Do 16.02.12 18:11
GELÖST: Ein Dictionary ist tatsächlich die einfachte Lösing! Manchmal denkt man zu kompliziert :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!